isa: fix paired single instruction arguments

Argument specific to this instruction were re/named to a more dolphin
aligned name
This commit is contained in:
InusualZ 2022-05-31 18:28:58 -04:00
parent b90b46ef8e
commit ad1ec7aaa9
4 changed files with 57 additions and 29 deletions

View File

@ -161,14 +161,22 @@ impl Ins {
self.0.field_crm() as i64 self.0.field_crm() as i64
} }
#[getter] #[getter]
fn ps_l(&self) -> i64 { fn ps_I(&self) -> i64 {
self.0.field_ps_l() as i64 self.0.field_ps_I() as i64
}
#[getter]
fn ps_IX(&self) -> i64 {
self.0.field_ps_IX() as i64
} }
#[getter] #[getter]
fn ps_W(&self) -> i64 { fn ps_W(&self) -> i64 {
self.0.field_ps_W() as i64 self.0.field_ps_W() as i64
} }
#[getter] #[getter]
fn ps_WX(&self) -> i64 {
self.0.field_ps_WX() as i64
}
#[getter]
fn ps_NB(&self) -> i64 { fn ps_NB(&self) -> i64 {
self.0.field_NB() as i64 self.0.field_NB() as i64
} }

View File

@ -1157,8 +1157,10 @@ pub enum Field {
crfD(CRField), crfD(CRField),
crfS(CRField), crfS(CRField),
crm(OpaqueU), crm(OpaqueU),
ps_l(GQR), ps_I(GQR),
ps_IX(GQR),
ps_W(OpaqueU), ps_W(OpaqueU),
ps_WX(OpaqueU),
NB(OpaqueU), NB(OpaqueU),
tbr(OpaqueU), tbr(OpaqueU),
mtfsf_FM(OpaqueU), mtfsf_FM(OpaqueU),
@ -1201,8 +1203,10 @@ impl Field {
Field::crfD(x) => Some(Argument::CRField(*x)), Field::crfD(x) => Some(Argument::CRField(*x)),
Field::crfS(x) => Some(Argument::CRField(*x)), Field::crfS(x) => Some(Argument::CRField(*x)),
Field::crm(x) => Some(Argument::OpaqueU(*x)), Field::crm(x) => Some(Argument::OpaqueU(*x)),
Field::ps_l(x) => Some(Argument::GQR(*x)), Field::ps_I(x) => Some(Argument::GQR(*x)),
Field::ps_IX(x) => Some(Argument::GQR(*x)),
Field::ps_W(x) => Some(Argument::OpaqueU(*x)), Field::ps_W(x) => Some(Argument::OpaqueU(*x)),
Field::ps_WX(x) => Some(Argument::OpaqueU(*x)),
Field::NB(x) => Some(Argument::OpaqueU(*x)), Field::NB(x) => Some(Argument::OpaqueU(*x)),
Field::tbr(x) => Some(Argument::OpaqueU(*x)), Field::tbr(x) => Some(Argument::OpaqueU(*x)),
Field::mtfsf_FM(x) => Some(Argument::OpaqueU(*x)), Field::mtfsf_FM(x) => Some(Argument::OpaqueU(*x)),
@ -1243,8 +1247,10 @@ impl Field {
Field::crfD(_) => "crfD", Field::crfD(_) => "crfD",
Field::crfS(_) => "crfS", Field::crfS(_) => "crfS",
Field::crm(_) => "crm", Field::crm(_) => "crm",
Field::ps_l(_) => "ps_l", Field::ps_I(_) => "ps_I",
Field::ps_IX(_) => "ps_IX",
Field::ps_W(_) => "ps_W", Field::ps_W(_) => "ps_W",
Field::ps_WX(_) => "ps_WX",
Field::NB(_) => "NB", Field::NB(_) => "NB",
Field::tbr(_) => "tbr", Field::tbr(_) => "tbr",
Field::mtfsf_FM(_) => "mtfsf_FM", Field::mtfsf_FM(_) => "mtfsf_FM",
@ -1931,7 +1937,7 @@ impl Ins {
)), )),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_I(GQR(((self.code >> 12u8) & 0x7) as _)),
], ],
Opcode::PsqLu => vec![ Opcode::PsqLu => vec![
Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)),
@ -1940,21 +1946,21 @@ impl Ins {
)), )),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_I(GQR(((self.code >> 12u8) & 0x7) as _)),
], ],
Opcode::PsqLux => vec![ Opcode::PsqLux => vec![
Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_WX(OpaqueU(((self.code >> 10u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_IX(GQR(((self.code >> 7u8) & 0x7) as _)),
], ],
Opcode::PsqLx => vec![ Opcode::PsqLx => vec![
Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_WX(OpaqueU(((self.code >> 10u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_IX(GQR(((self.code >> 7u8) & 0x7) as _)),
], ],
Opcode::PsqSt => vec![ Opcode::PsqSt => vec![
Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)),
@ -1963,7 +1969,7 @@ impl Ins {
)), )),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_I(GQR(((self.code >> 12u8) & 0x7) as _)),
], ],
Opcode::PsqStu => vec![ Opcode::PsqStu => vec![
Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)),
@ -1972,21 +1978,21 @@ impl Ins {
)), )),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_I(GQR(((self.code >> 12u8) & 0x7) as _)),
], ],
Opcode::PsqStux => vec![ Opcode::PsqStux => vec![
Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_WX(OpaqueU(((self.code >> 10u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_IX(GQR(((self.code >> 7u8) & 0x7) as _)),
], ],
Opcode::PsqStx => vec![ Opcode::PsqStx => vec![
Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frS(FPR(((self.code >> 21u8) & 0x1f) as _)),
Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)), Field::rA(GPR(((self.code >> 16u8) & 0x1f) as _)),
Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)), Field::rB(GPR(((self.code >> 11u8) & 0x1f) as _)),
Field::ps_W(OpaqueU(((self.code >> 15u8) & 0x1) as _)), Field::ps_WX(OpaqueU(((self.code >> 10u8) & 0x1) as _)),
Field::ps_l(GQR(((self.code >> 12u8) & 0x7) as _)), Field::ps_IX(GQR(((self.code >> 7u8) & 0x7) as _)),
], ],
Opcode::PsAbs => vec![ Opcode::PsAbs => vec![
Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)), Field::frD(FPR(((self.code >> 21u8) & 0x1f) as _)),
@ -6050,14 +6056,22 @@ impl Ins {
((self.code >> 12u8) & 0xff) as _ ((self.code >> 12u8) & 0xff) as _
} }
#[inline(always)] #[inline(always)]
pub fn field_ps_l(&self) -> usize { pub fn field_ps_I(&self) -> usize {
((self.code >> 12u8) & 0x7) as _ ((self.code >> 12u8) & 0x7) as _
} }
#[inline(always)] #[inline(always)]
pub fn field_ps_IX(&self) -> usize {
((self.code >> 7u8) & 0x7) as _
}
#[inline(always)]
pub fn field_ps_W(&self) -> usize { pub fn field_ps_W(&self) -> usize {
((self.code >> 15u8) & 0x1) as _ ((self.code >> 15u8) & 0x1) as _
} }
#[inline(always)] #[inline(always)]
pub fn field_ps_WX(&self) -> usize {
((self.code >> 10u8) & 0x1) as _
}
#[inline(always)]
pub fn field_NB(&self) -> usize { pub fn field_NB(&self) -> usize {
((self.code >> 11u8) & 0x1f) as _ ((self.code >> 11u8) & 0x1f) as _
} }

View File

@ -622,8 +622,8 @@ fn test_ins_psq_lx() {
frD(FPR(0)), frD(FPR(0)),
rA(GPR(0)), rA(GPR(0)),
rB(GPR(0)), rB(GPR(0)),
ps_W(OpaqueU(0)), ps_WX(OpaqueU(0)),
ps_l(GQR(0)) ps_IX(GQR(0))
] ]
); );
assert_eq!(ins.defs(), vec![frD(FPR(0))]); assert_eq!(ins.defs(), vec![frD(FPR(0))]);

View File

@ -112,12 +112,18 @@ fields:
arg: OpaqueU arg: OpaqueU
bits: 12..20 bits: 12..20
# Paired single fields # Paired single fields
- name: ps_l - name: ps_I
arg: GQR arg: GQR
bits: 17..20 bits: 17..20
- name: ps_IX
arg: GQR
bits: 22..25
- name: ps_W - name: ps_W
arg: OpaqueU arg: OpaqueU
bits: 16..17 bits: 16..17
- name: ps_WX
arg: OpaqueU
bits: 21..22
# Misc # Misc
- name: NB - name: NB
arg: OpaqueU arg: OpaqueU
@ -1268,7 +1274,7 @@ opcodes:
desc: Paired Single Quantized Load desc: Paired Single Quantized Load
bitmask: 0xfc000000 bitmask: 0xfc000000
pattern: 0xe0000000 pattern: 0xe0000000
args: [ frD, ps_offset, rA, ps_W, ps_l ] args: [ frD, ps_offset, rA, ps_W, ps_I ]
defs: [ frD ] defs: [ frD ]
uses: [ rA.nz ] uses: [ rA.nz ]
@ -1276,7 +1282,7 @@ opcodes:
desc: Paired Single Quantized Load with Update desc: Paired Single Quantized Load with Update
bitmask: 0xfc000000 bitmask: 0xfc000000
pattern: 0xe4000000 pattern: 0xe4000000
args: [ frD, ps_offset, rA, ps_W, ps_l ] args: [ frD, ps_offset, rA, ps_W, ps_I ]
defs: [ frD, rA ] defs: [ frD, rA ]
uses: [ rA ] uses: [ rA ]
@ -1284,7 +1290,7 @@ opcodes:
desc: Paired Single Quantized Load with Update Indexed desc: Paired Single Quantized Load with Update Indexed
bitmask: 0xfc00007f bitmask: 0xfc00007f
pattern: 0x1000004c pattern: 0x1000004c
args: [ frD, rA, rB, ps_W, ps_l ] args: [ frD, rA, rB, ps_WX, ps_IX ]
defs: [ frD, rA ] defs: [ frD, rA ]
uses: [ rA, rB ] uses: [ rA, rB ]
@ -1292,7 +1298,7 @@ opcodes:
desc: Paired Single Quantized Load Indexed desc: Paired Single Quantized Load Indexed
bitmask: 0xfc00007f bitmask: 0xfc00007f
pattern: 0x1000000c pattern: 0x1000000c
args: [ frD, rA, rB, ps_W, ps_l ] args: [ frD, rA, rB, ps_WX, ps_IX ]
defs: [ frD ] defs: [ frD ]
uses: [ rA.nz, rB ] uses: [ rA.nz, rB ]
@ -1300,14 +1306,14 @@ opcodes:
desc: Paired Single Quantized Store desc: Paired Single Quantized Store
bitmask: 0xfc000000 bitmask: 0xfc000000
pattern: 0xf0000000 pattern: 0xf0000000
args: [ frS, ps_offset, rA, ps_W, ps_l ] args: [ frS, ps_offset, rA, ps_W, ps_I ]
uses: [ frS, rA.nz ] uses: [ frS, rA.nz ]
- name: psq_stu - name: psq_stu
desc: Paired Single Quantized Store with Update desc: Paired Single Quantized Store with Update
bitmask: 0xfc000000 bitmask: 0xfc000000
pattern: 0xf4000000 pattern: 0xf4000000
args: [ frS, ps_offset, rA, ps_W, ps_l ] args: [ frS, ps_offset, rA, ps_W, ps_I ]
defs: [ rA ] defs: [ rA ]
uses: [ frS, rA ] uses: [ frS, rA ]
@ -1315,7 +1321,7 @@ opcodes:
desc: Paired Single Quantized Store with Update Indexed desc: Paired Single Quantized Store with Update Indexed
bitmask: 0xfc00007f bitmask: 0xfc00007f
pattern: 0x1000004e pattern: 0x1000004e
args: [ frS, rA, rB, ps_W, ps_l ] args: [ frS, rA, rB, ps_WX, ps_IX ]
defs: [ rA ] defs: [ rA ]
uses: [ frS, rA, rB ] uses: [ frS, rA, rB ]
@ -1323,7 +1329,7 @@ opcodes:
desc: Paired Single Quantized Store Indexed desc: Paired Single Quantized Store Indexed
bitmask: 0xfc00007f bitmask: 0xfc00007f
pattern: 0x1000000e pattern: 0x1000000e
args: [ frS, rA, rB, ps_W, ps_l ] args: [ frS, rA, rB, ps_WX, ps_IX ]
uses: [ frS, rA.nz, rB ] uses: [ frS, rA.nz, rB ]
- name: ps_abs - name: ps_abs