class R600Reg encoding> : Register { let Namespace = "AMDGPU"; let HWEncoding = encoding; } class R600Reg_128 subregs, bits<16> encoding> : RegisterWithSubRegs { let Namespace = "AMDGPU"; let SubRegIndices = [sel_x, sel_y, sel_z, sel_w]; let HWEncoding = encoding; } foreach Index = 0-127 in { foreach Chan = [ "X", "Y", "Z", "W" ] in { // 32-bit Temporary Registers def T#Index#_#Chan : R600Reg <"T"#Index#"."#Chan, !cast>(Index)>; // 32-bit Constant Registers (There are more than 128, this the number // that is currently supported. def C#Index#_#Chan : R600Reg <"C"#Index#"."#Chan, !cast>(Index)>; } // 128-bit Temporary Registers def T#Index#_XYZW : R600Reg_128 <"T"#Index#".XYZW", [!cast("T"#Index#"_X"), !cast("T"#Index#"_Y"), !cast("T"#Index#"_Z"), !cast("T"#Index#"_W")], !cast>(Index)>; } // Special Registers def ZERO : R600Reg<"0.0", 248>; def ONE : R600Reg<"1.0", 249>; def NEG_ONE : R600Reg<"-1.0", 249>; def ONE_INT : R600Reg<"1", 250>; def HALF : R600Reg<"0.5", 252>; def NEG_HALF : R600Reg<"-0.5", 252>; def ALU_LITERAL_X : R600Reg<"literal.x", 253>; def PV_X : R600Reg<"pv.x", 254>; def PREDICATE_BIT : R600Reg<"PredicateBit", 0>; def PRED_SEL_OFF: R600Reg<"Pred_sel_off", 0>; def PRED_SEL_ZERO : R600Reg<"Pred_sel_zero", 0>; def PRED_SEL_ONE : R600Reg<"Pred_sel_one", 0>; def R600_CReg32 : RegisterClass <"AMDGPU", [f32, i32], 32, (add (interleave (interleave (sequence "C%u_X", 0, 127), (sequence "C%u_Z", 0, 127)), (interleave (sequence "C%u_Y", 0, 127), (sequence "C%u_Z", 0, 127))))>; def R600_TReg32_X : RegisterClass <"AMDGPU", [f32, i32], 32, (add (sequence "T%u_X", 0, 127))>; def R600_TReg32_Y : RegisterClass <"AMDGPU", [f32, i32], 32, (add (sequence "T%u_Y", 0, 127))>; def R600_TReg32_Z : RegisterClass <"AMDGPU", [f32, i32], 32, (add (sequence "T%u_Z", 0, 127))>; def R600_TReg32_W : RegisterClass <"AMDGPU", [f32, i32], 32, (add (sequence "T%u_W", 0, 127))>; def R600_TReg32 : RegisterClass <"AMDGPU", [f32, i32], 32, (add (interleave (interleave R600_TReg32_X, R600_TReg32_Z), (interleave R600_TReg32_Y, R600_TReg32_W)))>; def R600_Reg32 : RegisterClass <"AMDGPU", [f32, i32], 32, (add R600_TReg32, R600_CReg32, ZERO, HALF, ONE, ONE_INT, PV_X, ALU_LITERAL_X, NEG_ONE, NEG_HALF)>; def R600_Predicate : RegisterClass <"AMDGPU", [i32], 32, (add PRED_SEL_OFF, PRED_SEL_ZERO, PRED_SEL_ONE)>; def R600_Predicate_Bit: RegisterClass <"AMDGPU", [i32], 32, (add PREDICATE_BIT)>; def R600_Reg128 : RegisterClass<"AMDGPU", [v4f32, v4i32], 128, (add (sequence "T%u_XYZW", 0, 127))> { let CopyCost = -1; }