|
@@ -538,6 +538,12 @@ enum class PhysicalAttributeDirection : u64 {
|
|
|
Output = 1,
|
|
Output = 1,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+enum class VoteOperation : u64 {
|
|
|
|
|
+ All = 0, // allThreadsNV
|
|
|
|
|
+ Any = 1, // anyThreadNV
|
|
|
|
|
+ Eq = 2, // allThreadsEqualNV
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
union Instruction {
|
|
union Instruction {
|
|
|
Instruction& operator=(const Instruction& instr) {
|
|
Instruction& operator=(const Instruction& instr) {
|
|
|
value = instr.value;
|
|
value = instr.value;
|
|
@@ -564,6 +570,13 @@ union Instruction {
|
|
|
BitField<13, 1, u64> trigger;
|
|
BitField<13, 1, u64> trigger;
|
|
|
} nop;
|
|
} nop;
|
|
|
|
|
|
|
|
|
|
+ union {
|
|
|
|
|
+ BitField<48, 2, VoteOperation> operation;
|
|
|
|
|
+ BitField<45, 3, u64> dest_pred;
|
|
|
|
|
+ BitField<39, 3, u64> value;
|
|
|
|
|
+ BitField<42, 1, u64> negate_value;
|
|
|
|
|
+ } vote;
|
|
|
|
|
+
|
|
|
union {
|
|
union {
|
|
|
BitField<8, 8, Register> gpr;
|
|
BitField<8, 8, Register> gpr;
|
|
|
BitField<20, 24, s64> offset;
|
|
BitField<20, 24, s64> offset;
|
|
@@ -1487,6 +1500,7 @@ public:
|
|
|
SYNC,
|
|
SYNC,
|
|
|
BRK,
|
|
BRK,
|
|
|
DEPBAR,
|
|
DEPBAR,
|
|
|
|
|
+ VOTE,
|
|
|
BFE_C,
|
|
BFE_C,
|
|
|
BFE_R,
|
|
BFE_R,
|
|
|
BFE_IMM,
|
|
BFE_IMM,
|
|
@@ -1649,6 +1663,7 @@ public:
|
|
|
Hfma2,
|
|
Hfma2,
|
|
|
Flow,
|
|
Flow,
|
|
|
Synch,
|
|
Synch,
|
|
|
|
|
+ Warp,
|
|
|
Memory,
|
|
Memory,
|
|
|
Texture,
|
|
Texture,
|
|
|
Image,
|
|
Image,
|
|
@@ -1775,6 +1790,7 @@ private:
|
|
|
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"),
|
|
|
INST("1111000011110---", Id::DEPBAR, Type::Synch, "DEPBAR"),
|
|
INST("1111000011110---", Id::DEPBAR, Type::Synch, "DEPBAR"),
|
|
|
|
|
+ INST("0101000011011---", Id::VOTE, Type::Warp, "VOTE"),
|
|
|
INST("1110111111011---", Id::LD_A, Type::Memory, "LD_A"),
|
|
INST("1110111111011---", Id::LD_A, Type::Memory, "LD_A"),
|
|
|
INST("1110111101001---", Id::LD_S, Type::Memory, "LD_S"),
|
|
INST("1110111101001---", Id::LD_S, Type::Memory, "LD_S"),
|
|
|
INST("1110111101000---", Id::LD_L, Type::Memory, "LD_L"),
|
|
INST("1110111101000---", Id::LD_L, Type::Memory, "LD_L"),
|