|
|
@ -173,6 +173,13 @@ enum class SubOp : u64 {
|
|
|
|
Min = 0x8,
|
|
|
|
Min = 0x8,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum class FloatRoundingOp : u64 {
|
|
|
|
|
|
|
|
None = 0,
|
|
|
|
|
|
|
|
Floor = 1,
|
|
|
|
|
|
|
|
Ceil = 2,
|
|
|
|
|
|
|
|
Trunc = 3,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
union Instruction {
|
|
|
|
union Instruction {
|
|
|
|
Instruction& operator=(const Instruction& instr) {
|
|
|
|
Instruction& operator=(const Instruction& instr) {
|
|
|
|
value = instr.value;
|
|
|
|
value = instr.value;
|
|
|
@ -277,11 +284,20 @@ union Instruction {
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
union {
|
|
|
|
BitField<10, 2, Register::Size> size;
|
|
|
|
BitField<10, 2, Register::Size> size;
|
|
|
|
BitField<13, 1, u64> is_signed;
|
|
|
|
BitField<12, 1, u64> is_output_signed;
|
|
|
|
|
|
|
|
BitField<13, 1, u64> is_input_signed;
|
|
|
|
BitField<41, 2, u64> selector;
|
|
|
|
BitField<41, 2, u64> selector;
|
|
|
|
BitField<45, 1, u64> negate_a;
|
|
|
|
BitField<45, 1, u64> negate_a;
|
|
|
|
BitField<49, 1, u64> abs_a;
|
|
|
|
BitField<49, 1, u64> abs_a;
|
|
|
|
BitField<50, 1, u64> saturate_a;
|
|
|
|
BitField<50, 1, u64> saturate_a;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
|
|
|
|
BitField<39, 2, FloatRoundingOp> rounding;
|
|
|
|
|
|
|
|
} f2i;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
|
|
|
|
BitField<39, 4, u64> rounding;
|
|
|
|
|
|
|
|
} f2f;
|
|
|
|
} conversion;
|
|
|
|
} conversion;
|
|
|
|
|
|
|
|
|
|
|
|
union {
|
|
|
|
union {
|
|
|
@ -535,9 +551,9 @@ private:
|
|
|
|
INST("0100110010101---", Id::F2F_C, Type::Conversion, "F2F_C"),
|
|
|
|
INST("0100110010101---", Id::F2F_C, Type::Conversion, "F2F_C"),
|
|
|
|
INST("0101110010101---", Id::F2F_R, Type::Conversion, "F2F_R"),
|
|
|
|
INST("0101110010101---", Id::F2F_R, Type::Conversion, "F2F_R"),
|
|
|
|
INST("0011100-10101---", Id::F2F_IMM, Type::Conversion, "F2F_IMM"),
|
|
|
|
INST("0011100-10101---", Id::F2F_IMM, Type::Conversion, "F2F_IMM"),
|
|
|
|
INST("0100110010110---", Id::F2I_C, Type::Arithmetic, "F2I_C"),
|
|
|
|
INST("0100110010110---", Id::F2I_C, Type::Conversion, "F2I_C"),
|
|
|
|
INST("0101110010110---", Id::F2I_R, Type::Arithmetic, "F2I_R"),
|
|
|
|
INST("0101110010110---", Id::F2I_R, Type::Conversion, "F2I_R"),
|
|
|
|
INST("0011100-10110---", Id::F2I_IMM, Type::Arithmetic, "F2I_IMM"),
|
|
|
|
INST("0011100-10110---", Id::F2I_IMM, Type::Conversion, "F2I_IMM"),
|
|
|
|
INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"),
|
|
|
|
INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"),
|
|
|
|
INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"),
|
|
|
|
INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"),
|
|
|
|
INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"),
|
|
|
|
INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"),
|
|
|
|