diff --git a/disasm/src/generated.rs b/disasm/src/generated.rs index f4e7393..0e4c79e 100644 --- a/disasm/src/generated.rs +++ b/disasm/src/generated.rs @@ -1130,6 +1130,7 @@ pub enum Field { simm(Simm), uimm(Uimm), offset(Offset), + ps_offset(Offset), BO(OpaqueU), BI(OpaqueU), BD(BranchDest), @@ -1820,66 +1821,66 @@ impl Ins { ], Opcode::PsqL => vec![ Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), - Field::offset(Offset( - (((self.code & 0xffff) ^ 0x8000).wrapping_sub(0x8000)) as _, + Field::ps_offset(Offset( + (((self.code & 0xfff) ^ 0x800).wrapping_sub(0x800)) as _, )), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqLu => vec![ Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), - Field::offset(Offset( - (((self.code & 0xffff) ^ 0x8000).wrapping_sub(0x8000)) as _, + Field::ps_offset(Offset( + (((self.code & 0xfff) ^ 0x800).wrapping_sub(0x800)) as _, )), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqLux => vec![ Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqLx => vec![ Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqSt => vec![ Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), - Field::offset(Offset( - (((self.code & 0xffff) ^ 0x8000).wrapping_sub(0x8000)) as _, + Field::ps_offset(Offset( + (((self.code & 0xfff) ^ 0x800).wrapping_sub(0x800)) as _, )), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqStu => vec![ Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), - Field::offset(Offset( - (((self.code & 0xffff) ^ 0x8000).wrapping_sub(0x8000)) as _, + Field::ps_offset(Offset( + (((self.code & 0xfff) ^ 0x800).wrapping_sub(0x800)) as _, )), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqStux => vec![ Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsqStx => vec![ Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), - Field::ps_W(OpaqueU(((self.code >> 16u8) & 0x0) as _)), + Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), ], Opcode::PsAbs => vec![ @@ -5709,6 +5710,10 @@ impl Ins { (((self.code & 0xffff) ^ 0x8000).wrapping_sub(0x8000)) as _ } #[inline(always)] + pub fn field_ps_offset(&self) -> isize { + (((self.code & 0xfff) ^ 0x800).wrapping_sub(0x800)) as _ + } + #[inline(always)] pub fn field_BO(&self) -> usize { ((self.code >> 21u8) & 0x1f) as _ } @@ -5814,7 +5819,7 @@ impl Ins { } #[inline(always)] pub fn field_ps_W(&self) -> usize { - ((self.code >> 16u8) & 0x0) as _ + ((self.code >> 15u8) & 0x1) as _ } #[inline(always)] pub fn field_NB(&self) -> usize { diff --git a/disasm/src/lib.rs b/disasm/src/lib.rs index 7f14e1e..b481215 100644 --- a/disasm/src/lib.rs +++ b/disasm/src/lib.rs @@ -172,6 +172,7 @@ impl Field { Field::simm(x) => Some(Argument::Simm(*x)), Field::uimm(x) => Some(Argument::Uimm(*x)), Field::offset(x) => Some(Argument::Offset(*x)), + Field::ps_offset(x) => Some(Argument::Offset(*x)), Field::BO(x) => Some(Argument::OpaqueU(*x)), Field::BI(x) => Some(Argument::OpaqueU(*x)), Field::BD(x) => Some(Argument::BranchDest(*x)), diff --git a/disasm/tests/test_disasm.rs b/disasm/tests/test_disasm.rs index 07391d8..5c3345c 100644 --- a/disasm/tests/test_disasm.rs +++ b/disasm/tests/test_disasm.rs @@ -638,13 +638,11 @@ fn test_ins_psq_lx() { assert_asm!(0x1000000C, "psq_lx f0, r0, r0, 0, qr0"); } -/* #[test] fn test_ins_psq_st() { assert_asm!(0xF1230210, "psq_st f9, 0x210(r3), 0, qr0"); - assert_asm!(0xF1238008, "psq_st f9, 8(r3), 1, qr0"); + assert_asm!(0xF1238008, "psq_st f9, 0x8(r3), 1, qr0"); } - */ #[test] fn test_ins_psq_stu() { diff --git a/isa.yaml b/isa.yaml index 9f196ba..8338117 100644 --- a/isa.yaml +++ b/isa.yaml @@ -11,6 +11,10 @@ fields: arg: Offset bits: 16..32 signed: true + - name: ps_offset + arg: Offset + bits: 20..32 + signed: true # Branch fields - name: BO arg: OpaqueU @@ -111,7 +115,7 @@ fields: bits: 17..20 - name: ps_W arg: OpaqueU - bits: 16 + bits: 16..17 # Misc - name: NB arg: OpaqueU @@ -1262,7 +1266,7 @@ opcodes: desc: Paired Single Quantized Load bitmask: 0xfc000000 pattern: 0xe0000000 - args: [ frD, offset, rA, ps_W, ps_l ] + args: [ frD, ps_offset, rA, ps_W, ps_l ] defs: [ frD ] uses: [ rA.nz ] @@ -1270,7 +1274,7 @@ opcodes: desc: Paired Single Quantized Load with Update bitmask: 0xfc000000 pattern: 0xe4000000 - args: [ frD, offset, rA, ps_W, ps_l ] + args: [ frD, ps_offset, rA, ps_W, ps_l ] defs: [ frD, rA ] uses: [ rA ] @@ -1294,14 +1298,14 @@ opcodes: desc: Paired Single Quantized Store bitmask: 0xfc000000 pattern: 0xf0000000 - args: [ frS, offset, rA, ps_W, ps_l ] + args: [ frS, ps_offset, rA, ps_W, ps_l ] uses: [ frS, rA.nz ] - name: psq_stu desc: Paired Single Quantized Store with Update bitmask: 0xfc000000 pattern: 0xf4000000 - args: [ frS, offset, rA, ps_W, ps_l ] + args: [ frS, ps_offset, rA, ps_W, ps_l ] defs: [ rA ] uses: [ frS, rA ]