From 925147ca2064d62cb17fd550e3b26abf90c74c7a Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 19 Mar 2014 22:19:56 +0000 Subject: [PATCH] R600/SI: Add unused LDS 2 form instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204275 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/R600/SIInstrInfo.td | 25 ++++++++++++++++++++++++- lib/Target/R600/SIInstructions.td | 11 +++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/Target/R600/SIInstrInfo.td b/lib/Target/R600/SIInstrInfo.td index 173f9bbd21c..e05ab65e8b6 100644 --- a/lib/Target/R600/SIInstrInfo.td +++ b/lib/Target/R600/SIInstrInfo.td @@ -412,10 +412,22 @@ class DS_Load_Helper op, string asm, RegisterClass regClass> : DS_1A < let mayStore = 0; } +class DS_Load2_Helper op, string asm, RegisterClass regClass> : DS < + op, + (outs regClass:$vdst), + (ins i1imm:$gds, VReg_32:$addr, i8imm:$offset0, i8imm:$offset1), + asm#" $gds, $vdst, $addr, $offset0, $offset1, [M0]", + []> { + let data0 = 0; + let data1 = 0; + let mayLoad = 1; + let mayStore = 0; +} + class DS_Store_Helper op, string asm, RegisterClass regClass> : DS_1A < op, (outs), - (ins i1imm:$gds, VReg_32:$addr, VReg_32:$data0, i16imm:$offset), + (ins i1imm:$gds, VReg_32:$addr, regClass:$data0, i16imm:$offset), asm#" $addr, $data0, $offset [M0]", []> { let data1 = 0; @@ -424,6 +436,17 @@ class DS_Store_Helper op, string asm, RegisterClass regClass> : DS_1A < let vdst = 0; } +class DS_Store2_Helper op, string asm, RegisterClass regClass> : DS_1A < + op, + (outs), + (ins i1imm:$gds, VReg_32:$addr, regClass:$data0, i8imm:$offset0, i8imm:$offset1), + asm#" $addr, $data0, $data1, $offset0, $offset1 [M0]", + []> { + let mayStore = 1; + let mayLoad = 0; + let vdst = 0; +} + class DS_1A1D_RET op, string asm, RegisterClass rc> : DS_1A < op, (outs rc:$vdst), diff --git a/lib/Target/R600/SIInstructions.td b/lib/Target/R600/SIInstructions.td index bbc72bf093a..fb25acaa1cd 100644 --- a/lib/Target/R600/SIInstructions.td +++ b/lib/Target/R600/SIInstructions.td @@ -417,6 +417,17 @@ def DS_READ_I16 : DS_Load_Helper <0x0000003b, "DS_READ_I16", VReg_32>; def DS_READ_U16 : DS_Load_Helper <0x0000003c, "DS_READ_U16", VReg_32>; def DS_READ_B64 : DS_Load_Helper <0x00000076, "DS_READ_B64", VReg_64>; +// 2 forms. +def DS_WRITE2_B32 : DS_Load2_Helper <0x0000000E, "DS_WRITE2_B32", VReg_64>; +def DS_WRITE2_B64 : DS_Load2_Helper <0x0000004E, "DS_WRITE2_B64", VReg_128>; + +def DS_READ2_B32 : DS_Load2_Helper <0x00000037, "DS_READ2_B32", VReg_64>; +def DS_READ2_B64 : DS_Load2_Helper <0x00000075, "DS_READ2_B64", VReg_128>; + +// TODO: DS_READ2ST64_B32, DS_READ2ST64_B64, +// DS_WRITE2ST64_B32, DS_WRITE2ST64_B64 + + //def BUFFER_LOAD_FORMAT_X : MUBUF_ <0x00000000, "BUFFER_LOAD_FORMAT_X", []>; //def BUFFER_LOAD_FORMAT_XY : MUBUF_ <0x00000001, "BUFFER_LOAD_FORMAT_XY", []>; //def BUFFER_LOAD_FORMAT_XYZ : MUBUF_ <0x00000002, "BUFFER_LOAD_FORMAT_XYZ", []>;