|
@@ -56,15 +56,18 @@ union Attribute {
|
|
|
Attribute_0 = 8,
|
|
Attribute_0 = 8,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- constexpr Index GetIndex() const {
|
|
|
|
|
- return index;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ union {
|
|
|
|
|
+ BitField<22, 2, u64> element;
|
|
|
|
|
+ BitField<24, 6, Index> index;
|
|
|
|
|
+ BitField<47, 3, u64> size;
|
|
|
|
|
+ } fmt20;
|
|
|
|
|
+
|
|
|
|
|
+ union {
|
|
|
|
|
+ BitField<30, 2, u64> element;
|
|
|
|
|
+ BitField<32, 6, Index> index;
|
|
|
|
|
+ } fmt28;
|
|
|
|
|
|
|
|
-public:
|
|
|
|
|
- BitField<24, 6, Index> index;
|
|
|
|
|
- BitField<22, 2, u64> element;
|
|
|
|
|
BitField<39, 8, u64> reg;
|
|
BitField<39, 8, u64> reg;
|
|
|
- BitField<47, 3, u64> size;
|
|
|
|
|
u64 value;
|
|
u64 value;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -104,6 +107,7 @@ union OpCode {
|
|
|
enum class Type {
|
|
enum class Type {
|
|
|
Trivial,
|
|
Trivial,
|
|
|
Arithmetic,
|
|
Arithmetic,
|
|
|
|
|
+ Ffma,
|
|
|
Flow,
|
|
Flow,
|
|
|
Memory,
|
|
Memory,
|
|
|
Unknown,
|
|
Unknown,
|
|
@@ -210,12 +214,11 @@ union OpCode {
|
|
|
info_table[Id::TEXS] = {Type::Memory, "texs"};
|
|
info_table[Id::TEXS] = {Type::Memory, "texs"};
|
|
|
info_table[Id::LD_A] = {Type::Memory, "ld_a"};
|
|
info_table[Id::LD_A] = {Type::Memory, "ld_a"};
|
|
|
info_table[Id::ST_A] = {Type::Memory, "st_a"};
|
|
info_table[Id::ST_A] = {Type::Memory, "st_a"};
|
|
|
- info_table[Id::IPA] = {Type::Arithmetic, "ipa"};
|
|
|
|
|
info_table[Id::MUFU] = {Type::Arithmetic, "mufu"};
|
|
info_table[Id::MUFU] = {Type::Arithmetic, "mufu"};
|
|
|
- info_table[Id::FFMA_IMM] = {Type::Arithmetic, "ffma_imm"};
|
|
|
|
|
- info_table[Id::FFMA_CR] = {Type::Arithmetic, "ffma_cr"};
|
|
|
|
|
- info_table[Id::FFMA_RC] = {Type::Arithmetic, "ffma_rc"};
|
|
|
|
|
- info_table[Id::FFMA_RR] = {Type::Arithmetic, "ffma_rr"};
|
|
|
|
|
|
|
+ info_table[Id::FFMA_IMM] = {Type::Ffma, "ffma_imm"};
|
|
|
|
|
+ info_table[Id::FFMA_CR] = {Type::Ffma, "ffma_cr"};
|
|
|
|
|
+ info_table[Id::FFMA_RC] = {Type::Ffma, "ffma_rc"};
|
|
|
|
|
+ info_table[Id::FFMA_RR] = {Type::Ffma, "ffma_rr"};
|
|
|
info_table[Id::FADD_R] = {Type::Arithmetic, "fadd_r"};
|
|
info_table[Id::FADD_R] = {Type::Arithmetic, "fadd_r"};
|
|
|
info_table[Id::FADD_C] = {Type::Arithmetic, "fadd_c"};
|
|
info_table[Id::FADD_C] = {Type::Arithmetic, "fadd_c"};
|
|
|
info_table[Id::FADD_IMM] = {Type::Arithmetic, "fadd_imm"};
|
|
info_table[Id::FADD_IMM] = {Type::Arithmetic, "fadd_imm"};
|
|
@@ -225,6 +228,7 @@ union OpCode {
|
|
|
info_table[Id::FSETP_C] = {Type::Arithmetic, "fsetp_c"};
|
|
info_table[Id::FSETP_C] = {Type::Arithmetic, "fsetp_c"};
|
|
|
info_table[Id::FSETP_R] = {Type::Arithmetic, "fsetp_r"};
|
|
info_table[Id::FSETP_R] = {Type::Arithmetic, "fsetp_r"};
|
|
|
info_table[Id::EXIT] = {Type::Trivial, "exit"};
|
|
info_table[Id::EXIT] = {Type::Trivial, "exit"};
|
|
|
|
|
+ info_table[Id::IPA] = {Type::Trivial, "ipa"};
|
|
|
info_table[Id::KIL] = {Type::Flow, "kil"};
|
|
info_table[Id::KIL] = {Type::Flow, "kil"};
|
|
|
return info_table;
|
|
return info_table;
|
|
|
}
|
|
}
|
|
@@ -285,16 +289,31 @@ union Instruction {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
OpCode opcode;
|
|
OpCode opcode;
|
|
|
- BitField<0, 8, Register> gpr1;
|
|
|
|
|
- BitField<8, 8, Register> gpr2;
|
|
|
|
|
|
|
+ BitField<0, 8, Register> gpr0;
|
|
|
|
|
+ BitField<8, 8, Register> gpr8;
|
|
|
BitField<16, 4, Pred> pred;
|
|
BitField<16, 4, Pred> pred;
|
|
|
|
|
+ BitField<20, 8, Register> gpr20;
|
|
|
BitField<20, 7, SubOp> sub_op;
|
|
BitField<20, 7, SubOp> sub_op;
|
|
|
- BitField<39, 8, Register> gpr3;
|
|
|
|
|
- BitField<45, 1, u64> nb;
|
|
|
|
|
- BitField<46, 1, u64> aa;
|
|
|
|
|
- BitField<48, 1, u64> na;
|
|
|
|
|
- BitField<49, 1, u64> ab;
|
|
|
|
|
- BitField<50, 1, u64> ad;
|
|
|
|
|
|
|
+ BitField<28, 8, Register> gpr28;
|
|
|
|
|
+ BitField<36, 13, u64> imm36;
|
|
|
|
|
+ BitField<39, 8, Register> gpr39;
|
|
|
|
|
+
|
|
|
|
|
+ union {
|
|
|
|
|
+ BitField<45, 1, u64> negate_b;
|
|
|
|
|
+ BitField<46, 1, u64> abs_a;
|
|
|
|
|
+ BitField<48, 1, u64> negate_a;
|
|
|
|
|
+ BitField<49, 1, u64> abs_b;
|
|
|
|
|
+ BitField<50, 1, u64> abs_d;
|
|
|
|
|
+ } alu;
|
|
|
|
|
+
|
|
|
|
|
+ union {
|
|
|
|
|
+ BitField<48, 1, u64> negate_b;
|
|
|
|
|
+ BitField<49, 1, u64> negate_c;
|
|
|
|
|
+ } ffma;
|
|
|
|
|
+
|
|
|
|
|
+ BitField<60, 1, u64> is_b_gpr;
|
|
|
|
|
+ BitField<59, 1, u64> is_c_gpr;
|
|
|
|
|
+
|
|
|
Attribute attribute;
|
|
Attribute attribute;
|
|
|
Uniform uniform;
|
|
Uniform uniform;
|
|
|
|
|
|