|
|
@ -1367,6 +1367,20 @@ union Instruction { |
|
|
} |
|
|
} |
|
|
} bra; |
|
|
} bra; |
|
|
|
|
|
|
|
|
|
|
|
union { |
|
|
|
|
|
BitField<20, 24, u64> target; |
|
|
|
|
|
BitField<5, 1, u64> constant_buffer; |
|
|
|
|
|
|
|
|
|
|
|
s32 GetBranchExtend() const { |
|
|
|
|
|
// Sign extend the branch target offset |
|
|
|
|
|
u32 mask = 1U << (24 - 1); |
|
|
|
|
|
u32 value = static_cast<u32>(target); |
|
|
|
|
|
// The branch offset is relative to the next instruction and is stored in bytes, so |
|
|
|
|
|
// divide it by the size of an instruction and add 1 to it. |
|
|
|
|
|
return static_cast<s32>((value ^ mask) - mask) / sizeof(Instruction) + 1; |
|
|
|
|
|
} |
|
|
|
|
|
} brx; |
|
|
|
|
|
|
|
|
union { |
|
|
union { |
|
|
BitField<39, 1, u64> emit; // EmitVertex |
|
|
BitField<39, 1, u64> emit; // EmitVertex |
|
|
BitField<40, 1, u64> cut; // EndPrimitive |
|
|
BitField<40, 1, u64> cut; // EndPrimitive |
|
|
@ -1464,6 +1478,7 @@ public: |
|
|
BFE_IMM, |
|
|
BFE_IMM, |
|
|
BFI_IMM_R, |
|
|
BFI_IMM_R, |
|
|
BRA, |
|
|
BRA, |
|
|
|
|
|
BRX, |
|
|
PBK, |
|
|
PBK, |
|
|
LD_A, |
|
|
LD_A, |
|
|
LD_L, |
|
|
LD_L, |
|
|
@ -1738,6 +1753,7 @@ private: |
|
|
INST("111000101001----", Id::SSY, Type::Flow, "SSY"), |
|
|
INST("111000101001----", Id::SSY, Type::Flow, "SSY"), |
|
|
INST("111000101010----", Id::PBK, Type::Flow, "PBK"), |
|
|
INST("111000101010----", Id::PBK, Type::Flow, "PBK"), |
|
|
INST("111000100100----", Id::BRA, Type::Flow, "BRA"), |
|
|
INST("111000100100----", Id::BRA, Type::Flow, "BRA"), |
|
|
|
|
|
INST("111000100101----", Id::BRX, Type::Flow, "BRX"), |
|
|
INST("1111000011111---", Id::SYNC, Type::Flow, "SYNC"), |
|
|
INST("1111000011111---", Id::SYNC, Type::Flow, "SYNC"), |
|
|
INST("111000110100---", Id::BRK, Type::Flow, "BRK"), |
|
|
INST("111000110100---", Id::BRK, Type::Flow, "BRK"), |
|
|
INST("111000110000----", Id::EXIT, Type::Flow, "EXIT"), |
|
|
INST("111000110000----", Id::EXIT, Type::Flow, "EXIT"), |
|
|
|