radeon/llvm: Extend SI EXEC register support.
authorMichel Dänzer <michel.daenzer@amd.com>
Wed, 29 Aug 2012 16:52:53 +0000 (18:52 +0200)
committerMichel Dänzer <michel@daenzer.net>
Thu, 6 Sep 2012 14:15:44 +0000 (16:15 +0200)
Add 32 bit lo and hi variants, and binary encodings.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/radeon/MCTargetDesc/SIMCCodeEmitter.cpp
src/gallium/drivers/radeon/SIGenRegisterInfo.pl

index c2b5e47bbbeba393a30a3c4b83031ddc004636e2..438d2acf989bbedb730fc3e9fc9a96a68238989d 100644 (file)
@@ -281,6 +281,9 @@ unsigned SIMCCodeEmitter::getEncodingBytes(const MCInst &MI) const {
 unsigned SIMCCodeEmitter::getRegBinaryCode(unsigned reg) const {
   switch (reg) {
     case AMDGPU::M0: return 124;
+    case AMDGPU::EXEC: return 126;
+    case AMDGPU::EXEC_LO: return 126;
+    case AMDGPU::EXEC_HI: return 127;
     case AMDGPU::SREG_LIT_0: return 128;
     case AMDGPU::SI_LITERAL_CONSTANT: return 255;
     default: return getHWRegNum(reg);
index e47fb56868e17f6707e62a43b0f38bca8241da6f..3813eb5ad124c4e8f7d2c672c723a88daf7c548b 100644 (file)
@@ -88,7 +88,9 @@ class SGPR_256 <bits<8> num, string name, list<Register> subregs> :
     SI_256 <name, subregs>;
 
 def VCC : SIReg<"VCC">;
-def EXEC : SIReg<"EXEC">;
+def EXEC_LO : SIReg<"EXEC LO">;
+def EXEC_HI : SIReg<"EXEC HI">;
+def EXEC : SI_64<"EXEC", [EXEC_LO,EXEC_HI]>;
 def SCC : SIReg<"SCC">;
 def SREG_LIT_0 : SIReg <"S LIT 0">;
 def SI_LITERAL_CONSTANT : SIReg<"LITERAL CONSTANT">;
@@ -141,7 +143,7 @@ for (my $i = 0; $i < $VGPR_COUNT; $i++) {
 print <<STRING;
 
 def SReg_32 : RegisterClass<"AMDGPU", [f32, i32], 32,
-    (add (sequence "SGPR%u", 0, $SGPR_MAX_IDX),  SREG_LIT_0, M0)
+    (add (sequence "SGPR%u", 0, $SGPR_MAX_IDX),  SREG_LIT_0, M0, EXEC_LO, EXEC_HI)
 >;
 
 def VReg_32 : RegisterClass<"AMDGPU", [f32, i32], 32,