fix psq_st disasm
This commit is contained in:
parent
da869222d0
commit
70192c75a4
|
@ -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 {
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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() {
|
||||
|
|
14
isa.yaml
14
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 ]
|
||||
|
||||
|
|
Loading…
Reference in New Issue