ppc750cl/isa.yaml

2551 lines
54 KiB
YAML
Raw Permalink Normal View History

2021-08-23 18:30:03 -07:00
fields:
# Immediates
2022-04-06 16:20:28 -07:00
- name: simm
arg: Simm
bits: 16..32
2021-08-23 18:30:03 -07:00
signed: true
2022-04-06 16:20:28 -07:00
- name: uimm
arg: Uimm
bits: 16..32
- name: offset
arg: Offset
bits: 16..32
2021-08-24 18:23:57 -07:00
signed: true
2022-04-08 17:09:44 -07:00
- name: ps_offset
arg: Offset
bits: 20..32
signed: true
2021-08-23 18:30:03 -07:00
# Branch fields
2022-04-06 16:20:28 -07:00
- name: BO
arg: OpaqueU
bits: 6..11
- name: BI
arg: CRBit
2022-04-06 16:20:28 -07:00
bits: 11..16
- name: BH
arg: OpaqueU
bits: 19..21
2022-04-06 16:20:28 -07:00
- name: BD
arg: BranchDest
bits: 16..30
2021-08-23 18:30:03 -07:00
shift_left: 2
2022-04-06 19:07:15 -07:00
signed: true
2022-04-06 16:20:28 -07:00
- name: LI
arg: BranchDest
bits: 6..30
2022-04-06 19:07:15 -07:00
signed: true
2021-08-23 18:30:03 -07:00
shift_left: 2
# Shift/rotate type fields
2022-04-06 16:20:28 -07:00
- name: SH
arg: OpaqueU
desc: Shift
bits: 16..21
- name: MB
arg: OpaqueU
desc: Mask start
bits: 21..26
- name: ME
arg: OpaqueU
desc: Mask stop
bits: 26..31
2021-08-23 18:30:03 -07:00
# Registers
2022-04-06 16:20:28 -07:00
- name: rS
arg: GPR
bits: 6..11
- name: rD
arg: GPR
bits: 6..11
- name: rA
arg: GPR
bits: 11..16
- name: rA.nz
arg: GPR
bits: 11..16
- name: rB
arg: GPR
bits: 16..21
- name: rC
arg: GPR
bits: 21..26
- name: sr
arg: SR
bits: 12..16
- name: spr
arg: SPR
bits: 11..21
2021-08-24 18:23:57 -07:00
split: true
# Floating-point registers
2022-04-06 16:20:28 -07:00
- name: frS
arg: FPR
bits: 6..11
- name: frD
arg: FPR
bits: 6..11
- name: frA
arg: FPR
bits: 11..16
- name: frB
arg: FPR
bits: 16..21
- name: frC
arg: FPR
bits: 21..26
# Condition register bits
2022-04-06 16:20:28 -07:00
- name: crbD
arg: CRBit
2022-04-06 16:20:28 -07:00
bits: 6..11
- name: crbA
arg: CRBit
2022-04-06 16:20:28 -07:00
bits: 11..16
- name: crbB
arg: CRBit
2022-04-06 16:20:28 -07:00
bits: 16..21
2021-08-23 18:30:03 -07:00
# Condition register fields
2022-04-06 16:20:28 -07:00
- name: crfD
arg: CRField
2022-04-06 16:20:28 -07:00
bits: 6..9
- name: crfS
arg: CRField
2022-04-06 16:20:28 -07:00
bits: 11..14
2021-08-24 18:23:57 -07:00
# Condition register misc
2022-04-06 16:20:28 -07:00
- name: crm
arg: OpaqueU
bits: 12..20
2021-08-23 18:30:03 -07:00
# Paired single fields
- name: ps_I
2022-04-06 16:20:28 -07:00
arg: GQR
bits: 17..20
- name: ps_IX
arg: GQR
bits: 22..25
2022-04-06 16:20:28 -07:00
- name: ps_W
arg: OpaqueU
2022-04-08 17:09:44 -07:00
bits: 16..17
- name: ps_WX
arg: OpaqueU
bits: 21..22
2021-08-23 18:30:03 -07:00
# Misc
2022-04-06 16:20:28 -07:00
- name: NB
arg: OpaqueU
bits: 16..21
- name: tbr
arg: OpaqueU
desc: Time Base
bits: 11..21
2021-08-23 18:30:03 -07:00
split: true
2022-04-06 16:20:28 -07:00
- name: mtfsf_FM
arg: OpaqueU
desc: Field Mask for mtfsf
bits: 7..15
- name: mtfsf_IMM
arg: OpaqueU
desc: Immediate for mtfsfi
bits: 16..20
- name: spr_SPRG
arg: OpaqueU
desc: SPRG index for m[tf]sprg
bits: 14..16
- name: spr_BAT
arg: OpaqueU
desc: IBAT/DBAT index for m[tf][id]bat[ul]
bits: 13..15
2022-04-06 16:20:28 -07:00
- name: TO
arg: OpaqueU
desc: Bitset for tw and twi
bits: 6..11
- name: L
arg: OpaqueU
desc: Bitset for cmp, cmpi, cmpl, cmpli
bits: 10..11
2022-04-06 16:20:28 -07:00
- name: xer
- name: ctr
- name: lr
2021-08-24 18:23:57 -07:00
# TODO Add defs/uses for modifiers.
modifiers:
2022-04-06 16:20:28 -07:00
- name: OE
suffix: o
2022-04-06 20:33:38 -07:00
bit: 21
2022-04-06 16:20:28 -07:00
- name: Rc
suffix: .
2022-04-06 20:33:38 -07:00
bit: 31
2022-04-06 16:20:28 -07:00
- name: LK
suffix: l
2022-04-06 20:33:38 -07:00
bit: 31
2022-04-06 16:20:28 -07:00
- name: AA
suffix: a
2022-04-06 20:33:38 -07:00
bit: 30
# Predict branch to be taken
- name: BP
suffix: +
condition: BO & 1 == 1 && BD >= 0
# Predict branch not to be taken (fall through)
- name: BNP
suffix: '-'
condition: BO & 1 == 1 && BD < 0
# Predict branch to be taken (implicit dest for LR/CTR)
- name: BP_ND
suffix: +
condition: BO & 1 == 1
2021-08-23 18:30:03 -07:00
2021-08-23 17:17:01 -07:00
opcodes:
2022-04-06 16:20:28 -07:00
- name: add
desc: Add
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000214
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addc
desc: Add Carrying
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000014
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: adde
desc: Add Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000114
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addi
desc: Add Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x38000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, simm ]
defs: [ rD ]
uses: [ rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addic
desc: Add Immediate Carrying
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x30000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, simm ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addic.
desc: Add Immediate Carrying and Record
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x34000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, simm ]
side_effects: [ Rc ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addis
desc: Add Immediate Shifted
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x3c000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, uimm ]
defs: [ rD ]
uses: [ rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addme
desc: Add to Minus One Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fbfe
pattern: 0x7c0001d4
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: addze
desc: Add to Zero Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fbfe
pattern: 0x7c000194
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: and
desc: AND
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000038
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: andc
desc: AND with Complement
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000078
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: andi.
desc: AND Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x70000000
2022-04-06 16:20:28 -07:00
side_effects: [ Rc ]
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: andis.
desc: AND Immediate Shifted
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x74000000
2022-04-06 16:20:28 -07:00
side_effects: [ Rc ]
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: b
desc: Branch
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x48000000
modifiers: [ LK, AA ]
2022-04-06 16:20:28 -07:00
args: [ LI ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: bc
desc: Branch Conditional
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x40000000
modifiers: [ LK, AA, BP, BNP ]
2022-04-06 16:20:28 -07:00
args: [ BO, BI, BD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: bcctr
desc: Branch Conditional to Count Register
2022-04-06 19:44:38 -07:00
bitmask: 0xfc007ffe
pattern: 0x4c000420
modifiers: [ LK, BP_ND ]
args: [ BO, BI, BH ]
2022-04-06 16:20:28 -07:00
uses: [ ctr ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: bclr
desc: Branch Conditional to Link Register
2022-04-06 19:44:38 -07:00
bitmask: 0xfc007ffe
2021-08-23 17:17:01 -07:00
pattern: 0x4c000020
modifiers: [ LK, BP_ND ]
args: [ BO, BI, BH ]
2022-04-06 16:20:28 -07:00
uses: [ lr ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cmp
desc: Compare
2021-08-23 17:17:01 -07:00
bitmask: 0xfc4007ff
pattern: 0x7c000000
args: [ crfD, L, rA, rB ]
2022-04-06 16:20:28 -07:00
defs: [ crfD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cmpi
desc: Compare Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc400000
pattern: 0x2c000000
args: [ crfD, L, rA, simm ]
2022-04-06 16:20:28 -07:00
defs: [ crfD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cmpl
desc: Compare Logical
2021-08-23 17:17:01 -07:00
bitmask: 0xfc4007ff
pattern: 0x7c000040
args: [ crfD, L, rA, rB ]
2022-04-06 16:20:28 -07:00
defs: [ crfD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cmpli
desc: Compare Logical Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc400000
pattern: 0x28000000
args: [ crfD, L, rA, uimm ]
2022-04-06 16:20:28 -07:00
defs: [ crfD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cntlzw
desc: Count Leading Zeros Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fffe
pattern: 0x7c000034
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crand
desc: Condition Register AND
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000202
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crandc
desc: Condition Register AND with Complement
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000102
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: creqv
desc: Condition Register Equivalent
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000242
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crnand
desc: Condition Register NAND
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c0001c2
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crnor
desc: Condition Register NOR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000042
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: cror
desc: Condition Register OR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000382
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crorc
desc: Condition Register OR with Complement
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000342
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: crxor
desc: Condition Register XOR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x4c000182
2022-04-06 16:20:28 -07:00
args: [ crbD, crbA, crbB ]
defs: [ crbD ]
uses: [ crbA, crbB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbf
desc: Data Cache Block Flush
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c0000ac
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbi
desc: Data Cache Block Invalidate
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c0003ac
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbst
desc: Data Cache Block Store
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c00006c
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbt
desc: Data Cache Block Touch
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c00022c
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbtst
desc: Data Cache Block Touch for Store
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c0001ec
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbz
desc: Data Cache Block Clear to Zero
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c0007ec
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: dcbz_l
desc: Data Cache Block Set to Zero Locked
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x100007ec
2022-04-06 16:20:28 -07:00
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: divw
desc: Divide Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c0003d6
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: divwu
desc: Divide Word Unsigned
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c000396
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: eciwx
desc: External Control In Word Indexed
bitmask: 0xfc0007ff
2021-08-23 17:17:01 -07:00
pattern: 0x7c00026c
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ecowx
desc: External Control Out Word Indexed
bitmask: 0xfc0007ff
2021-08-23 17:17:01 -07:00
pattern: 0x7c00036c
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: eieio
desc: Enforce In-Order Execution of I/O
2021-08-23 17:17:01 -07:00
bitmask: 0xffffffff
pattern: 0x7c0006ac
2022-04-06 16:20:28 -07:00
- name: eqv
desc: Equivalent
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c000238
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: extsb
desc: Extend Sign Byte
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fffe
pattern: 0x7c000774
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: extsh
desc: Extend Sign Half Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fffe
pattern: 0x7c000734
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fabs
desc: Floating Absolute Value
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000210
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fadd
desc: Floating Add (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xfc00002a
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fadds
desc: Floating Add (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xec00002a
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fcmpo
desc: Floating Compare Ordered
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0xfc000040
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fcmpu
desc: Floating Compare Unordered
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0xfc000000
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fctiw
desc: Floating Convert to Integer Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc00001c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fctiwz
desc: Floating Convert to Integer Word with Round toward Zero
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc00001e
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fdiv
desc: Floating Divide (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xfc000024
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fdivs
desc: Floating Divide (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xec000024
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmadd
desc: Floating Multiply-Add (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xfc00003a
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmadds
desc: Floating Multiply-Add (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xec00003a
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmr
desc: Floating Move Register (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000090
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmsub
desc: Floating Multiply-Subtract (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xfc000038
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmsubs
desc: Floating Multiply-Subtract (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xec000038
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmul
desc: Floating Multiply (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00f83e
pattern: 0xfc000032
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC ]
defs: [ frD ]
uses: [ frA, frC ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fmuls
desc: Floating Multiply (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00f83e
pattern: 0xec000032
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC ]
defs: [ frD ]
uses: [ frA, frC ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fnabs
desc: Floating Negative Absolute Value
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000110
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fneg
desc: Floating Negate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000050
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fnmadd
desc: Floating Negative Multiply-Add (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xfc00003e
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fnmadds
desc: Floating Negative Multiply-Add (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xec00003e
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fnmsub
desc: Floating Negative Multiply-Subtract (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xfc00003c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fnmsubs
desc: Floating Negative Multiply-Subtract (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xec00003c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fres
desc: Floating Reciprocal Estimate Single
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xec000030
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: frsp
desc: Floating Round to Single
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000018
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: frsqrte
desc: Floating Reciprocal Square Root Estimate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0xfc000034
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fsel
desc: Floating Select
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0xfc00002e
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fsub
desc: Floating Subtract (Double-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xfc000028
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: fsubs
desc: Floating Subtract (Single-Precision)
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0xec000028
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: icbi
desc: Instruction Cache Block Invalidate
2021-08-23 17:17:01 -07:00
bitmask: 0xffe007ff
pattern: 0x7c0007ac
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rB ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: isync
desc: Instruction Synchronize
2021-08-23 17:17:01 -07:00
bitmask: 0xffffffff
pattern: 0x4c00012c
2022-04-06 16:20:28 -07:00
- name: lbz
desc: Load Byte and Zero
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x88000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lbzu
desc: Load Byte and Zero with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x8c000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lbzux
desc: Load Byte and Zero with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0000ee
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lbzx
desc: Load Byte and Zero Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0000ae
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfd
desc: Load Floating-Point Double
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xc8000000
2022-04-06 16:20:28 -07:00
args: [ frD, offset, rA ]
defs: [ frD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfdu
desc: Load Floating-Point Double with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xcc000000
2022-04-06 16:20:28 -07:00
args: [ frD, offset, rA ]
defs: [ frD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfdux
desc: Load Floating-Point Double with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0004ee
2022-04-06 16:20:28 -07:00
args: [ frD, rA, rB ]
defs: [ frD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfdx
desc: Load Floating-Point Double Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
2021-08-23 18:30:03 -07:00
pattern: 0x7c0004ae
2022-04-06 16:20:28 -07:00
args: [ frD, rA, rB ]
defs: [ frD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfs
desc: Load Floating-Point Single
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xc0000000
2022-04-06 16:20:28 -07:00
args: [ frD, offset, rA ]
defs: [ frD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfsu
desc: Load Floating-Point Single with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xc4000000
2022-04-06 16:20:28 -07:00
args: [ frD, offset, rA ]
defs: [ frD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfsux
desc: Load Floating-Point Single with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00046e
2022-04-06 16:20:28 -07:00
args: [ frD, rA, rB ]
defs: [ frD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lfsx
desc: Load Floating-Point Single Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00042e
2022-04-06 16:20:28 -07:00
args: [ frD, rA, rB ]
defs: [ frD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lha
desc: Load Half Word Algebraic
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xa8000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhau
desc: Load Half Word Algebraic with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xac000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhaux
desc: Load Half Word Algebraic with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0002ee
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhax
desc: Load Half Word Algebraic Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0002ae
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhbrx
desc: Load Half Word Byte-Reverse Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00062c
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhz
desc: Load Half Word and Zero
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xa0000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhzu
desc: Load Half Word and Zero with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xa4000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhzux
desc: Load Half Word and Zero with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00026e
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lhzx
desc: Load Half Word and Zero Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00022e
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
# TODO lmw has much more defs
2022-04-06 16:20:28 -07:00
- name: lmw
desc: Load Multiple Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xb8000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lswi
desc: Load String Word Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0004aa
2022-04-06 16:20:28 -07:00
args: [ rD, rA, NB ]
defs: [ rD ]
uses: [ rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lswx
desc: Load String Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00042a
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwarx
desc: Load String Word and Reverse Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c000028
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwbrx
desc: Load String Word and Byte-Reverse Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00042c
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwz
desc: Load Word and Zero
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x80000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD ]
uses: [ offset, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwzu
desc: Load Word and Zero with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x84000000
2022-04-06 16:20:28 -07:00
args: [ rD, offset, rA ]
defs: [ rD, rA ]
uses: [ offset, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwzux
desc: Load Word and Zero with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00006e
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: lwzx
desc: Load Word and Zero Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00002e
2022-04-06 16:20:28 -07:00
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mcrf
desc: Move Condition Register Field
2022-12-11 20:47:35 -08:00
bitmask: 0xfc63ffff
2021-08-23 17:17:01 -07:00
pattern: 0x4c000000
2022-04-06 16:20:28 -07:00
args: [ crfD, crfS ]
defs: [ crfD ]
uses: [ crfS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mcrfs
desc: Move to Condition Register from FPSCR
2022-12-11 20:47:35 -08:00
bitmask: 0xfc63ffff
2021-08-23 17:17:01 -07:00
pattern: 0xfc000080
2022-04-06 16:20:28 -07:00
args: [ crfD, crfS ]
defs: [ crfD ]
uses: [ crfS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mcrxr
desc: Move to Condition Register from XER
2022-12-11 20:47:35 -08:00
bitmask: 0xfc7fffff
2021-08-23 17:17:01 -07:00
pattern: 0x7c000400
2022-04-06 16:20:28 -07:00
args: [ crfD ]
defs: [ crfD, xer ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mfcr
desc: Move from Condition Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1fffff
pattern: 0x7c000026
2022-05-31 16:17:42 -07:00
args: [ rD ]
defs: [ rD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mffs
desc: Move from FPSCR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1ffffe
2021-08-23 18:30:03 -07:00
pattern: 0xfc00048e
args: [ frD ]
defs: [ frD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mfmsr
desc: Move from Machine State Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1fffff
pattern: 0x7c0000a6
2022-04-06 16:20:28 -07:00
args: [ rD ]
defs: [ rD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mfspr
desc: Move from Special-Purpose Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0002a6
2022-04-06 16:20:28 -07:00
args: [ rD, spr ]
defs: [ rD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mfsr
desc: Move from Segment Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc10ffff
pattern: 0x7c0004a6
2022-04-06 16:20:28 -07:00
args: [ rD, sr ]
defs: [ rD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mfsrin
desc: Move from Segment Register Indirect
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07ff
pattern: 0x7c000526
2022-04-06 16:20:28 -07:00
args: [ rD, rB ]
defs: [ rD ]
uses: [ rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mftb
desc: Move from Time Base
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0002e6
2022-04-06 16:20:28 -07:00
args: [ rD, tbr ]
defs: [ rD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtcrf
desc: Move to Condition Register Fields
2021-08-23 17:17:01 -07:00
bitmask: 0xfc100fff
pattern: 0x7c000120
2022-04-06 16:20:28 -07:00
args: [ crm, rS ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtfsb0
desc: Move to FPSCR Bit 0
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1ffffe
pattern: 0xfc00008c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ crbD ]
defs: [ crbD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtfsb1
desc: Move to FPSCR Bit 1
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1ffffe
pattern: 0xfc00004c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ crbD ]
defs: [ crbD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtfsf
desc: Move to FPSCR Fields
2021-08-23 17:17:01 -07:00
bitmask: 0xfe0107fe
pattern: 0xfc00058e
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ mtfsf_FM, frB ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtfsfi
desc: Move to FPSCR Field Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc7f0ffe
pattern: 0xfc00010c
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ crfD, mtfsf_IMM ]
defs: [ crfD ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtmsr
desc: Move to Machine State Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1fffff
pattern: 0x7c000124
2022-04-06 16:20:28 -07:00
args: [ rS ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtspr
desc: Move to Special-Purpose Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0003a6
2022-04-06 16:20:28 -07:00
args: [ spr, rS ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtsr
desc: Move to Segment Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc10ffff
pattern: 0x7c0001a4
2022-04-06 16:20:28 -07:00
args: [ sr, rS ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mtsrin
desc: Move to Segment Register Indirect
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07ff
pattern: 0x7c0001e4
2022-04-06 16:20:28 -07:00
args: [ rS, rB ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mulhw
desc: Multiply High Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000096
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mulhwu
desc: Multiply High Word Unsigned
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000016
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mulli
desc: Multiply Low Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x1c000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, simm ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: mullw
desc: Multiply Low Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c0001d6
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: nand
desc: NAND
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c0003b8
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: neg
desc: Negate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fffe
pattern: 0x7c0000d0
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: nor
desc: NOR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c0000f8
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: or
desc: OR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000378
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: orc
desc: OR with Complement
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000338
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ori
desc: OR Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x60000000
2022-04-06 16:20:28 -07:00
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: oris
desc: OR Immediate Shifted
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x64000000
2022-04-06 16:20:28 -07:00
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_l
desc: Paired Single Quantized Load
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xe0000000
args: [ frD, ps_offset, rA, ps_W, ps_I ]
2022-04-06 16:20:28 -07:00
defs: [ frD ]
uses: [ rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_lu
desc: Paired Single Quantized Load with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xe4000000
args: [ frD, ps_offset, rA, ps_W, ps_I ]
2022-04-06 16:20:28 -07:00
defs: [ frD, rA ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_lux
desc: Paired Single Quantized Load with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00007f
pattern: 0x1000004c
args: [ frD, rA, rB, ps_WX, ps_IX ]
2022-04-06 16:20:28 -07:00
defs: [ frD, rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_lx
desc: Paired Single Quantized Load Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00007f
pattern: 0x1000000c
args: [ frD, rA, rB, ps_WX, ps_IX ]
2022-04-06 16:20:28 -07:00
defs: [ frD ]
uses: [ rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_st
desc: Paired Single Quantized Store
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xf0000000
args: [ frS, ps_offset, rA, ps_W, ps_I ]
2022-04-06 16:20:28 -07:00
uses: [ frS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_stu
desc: Paired Single Quantized Store with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xf4000000
args: [ frS, ps_offset, rA, ps_W, ps_I ]
2022-04-06 16:20:28 -07:00
defs: [ rA ]
uses: [ frS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_stux
desc: Paired Single Quantized Store with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00007f
pattern: 0x1000004e
args: [ frS, rA, rB, ps_WX, ps_IX ]
2022-04-06 16:20:28 -07:00
defs: [ rA ]
uses: [ frS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: psq_stx
desc: Paired Single Quantized Store Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00007f
pattern: 0x1000000e
args: [ frS, rA, rB, ps_WX, ps_IX ]
2022-04-06 16:20:28 -07:00
uses: [ frS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_abs
desc: Paired Single Absolute Value
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000210
2022-04-06 17:36:49 -07:00
args: [ frD, frB ]
2022-04-06 16:20:28 -07:00
defs: [ frD ]
2022-04-06 17:36:49 -07:00
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_add
desc: Paired Single Add
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x1000002a
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_cmpo0
desc: Paired Singles Compare Ordered High
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0x10000040
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA.nz, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_cmpo1
desc: Paired Singles Compare Ordered Low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0x100000c0
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA.nz, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_cmpu0
desc: Paired Singles Compare Unordered High
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0x10000000
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA.nz, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_cmpu1
desc: Paired Singles Compare Unordered Low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc6007ff
pattern: 0x10000080
2022-04-06 16:20:28 -07:00
args: [ crfD, frA, frB ]
defs: [ crfD ]
uses: [ frA.nz, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_div
desc: Paired Single Divide
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x10000024
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_madd
desc: Paired Single Multiply-Add
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000003a
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_madds0
desc: Paired Single Multiply-Add Scalar high
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000001c
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_madds1
desc: Paired Single Multiply-Add Scalar low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000001e
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_merge00
desc: Paired Single MERGE high
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x10000420
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_merge01
desc: Paired Single MERGE direct
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x10000460
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_merge10
desc: Paired Single MERGE swapped
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x100004a0
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_merge11
desc: Paired Single MERGE low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x100004e0
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_mr
desc: Paired Single Move Register
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000090
args: [ frD, frB ]
2022-04-06 16:20:28 -07:00
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_msub
desc: Paired Single Multiply-Subtract
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x10000038
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_mul
desc: Paired Single Multiply
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00f83e
pattern: 0x10000032
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC ]
defs: [ frD ]
uses: [ frA, frC ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_muls0
desc: Paired Single Multiply Scalar high
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00f83e
pattern: 0x10000018
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC ]
defs: [ frD ]
uses: [ frA, frC ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_muls1
desc: Paired Single Multiply Scalar low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00f83e
pattern: 0x1000001a
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC ]
defs: [ frD ]
uses: [ frA, frC ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_nabs
desc: Paired Single Negative Absolute Value
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000110
2022-04-06 16:20:28 -07:00
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_neg
desc: Paired Single Negate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000050
2022-04-06 16:20:28 -07:00
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_nmadd
desc: Paired Single Negative Multiply-Add
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000003e
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_nmsub
desc: Paired Single Negative Multiply-Subtract
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000003c
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_res
desc: Paired Single Reciprocal Estimate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000030
2022-04-06 16:20:28 -07:00
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_rsqrte
desc: Paired Single Reciprocal Square Root Estimate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc1f07fe
pattern: 0x10000034
2022-04-06 16:20:28 -07:00
args: [ frD, frB ]
defs: [ frD ]
uses: [ frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_sel
desc: Paired Single Select
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x1000002e
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_sub
desc: Paired Single Subtract
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x10000028
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frB ]
defs: [ frD ]
uses: [ frA, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_sum0
desc: Paired Single vector SUM high
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x10000014
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: ps_sum1
desc: Paired Single vector SUM low
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00003e
pattern: 0x10000016
2022-04-06 16:20:28 -07:00
args: [ frD, frA, frC, frB ]
defs: [ frD ]
uses: [ frA, frC, frB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: rfi
desc: Return from Interrupt
2021-08-23 17:17:01 -07:00
bitmask: 0xfffff801
pattern: 0x4c000000
2022-04-06 16:20:28 -07:00
- name: rlwimi
desc: Rotate Left Word Immediate then Mask Insert
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x50000000
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, SH, MB, ME ]
defs: [ rA ]
uses: [ rA, rS, SH ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: rlwinm
desc: Rotate Left Word Immediate then AND with Mask
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x54000000
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, SH, MB, ME ]
defs: [ rA ]
uses: [ rS, SH ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: rlwnm
desc: Rotate Left Word then AND with Mask
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x5c000000
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB, MB, ME ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sc
desc: System Call
2021-08-23 17:17:01 -07:00
bitmask: 0xffffffff
pattern: 0x44000002
2022-04-06 16:20:28 -07:00
- name: slw
desc: Shift Left Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000030
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sraw
desc: Shift Right Algebraic Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000630
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: srawi
desc: Shift Right Algebraic Word Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000670
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
args: [ rA, rS, SH ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: srw
desc: Shift Right Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000430
2022-04-06 16:20:28 -07:00
modifiers: [ Rc ]
2022-05-31 16:30:33 -07:00
args: [ rA, rS, rB ]
2022-04-06 16:20:28 -07:00
defs: [ rA ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stb
desc: Store Byte
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x98000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
uses: [ rS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stbu
desc: Store Byte with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x9c000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
defs: [ rA ]
uses: [ rS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stbux
desc: Store Byte with Update Indexed
bitmask: 0xfc0007ff
2021-08-23 17:17:01 -07:00
pattern: 0x7c0001ee
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
defs: [ rA ]
uses: [ rS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stbx
desc: Store Byte Indexed
bitmask: 0xfc0007ff
2021-08-23 17:17:01 -07:00
pattern: 0x7c0001ae
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfd
desc: Store Floating-Point Double
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xd8000000
2022-04-06 17:36:49 -07:00
args: [ frS, offset, rA ]
uses: [ frS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfdu
desc: Store Floating-Point Double with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xdc000000
2022-04-06 17:36:49 -07:00
args: [ frS, offset, rA ]
2022-04-06 16:20:28 -07:00
defs: [ rA ]
2022-04-06 17:36:49 -07:00
uses: [ frS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfdux
desc: Store Floating-Point Double with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0005ee
2022-04-06 16:20:28 -07:00
args: [ frS, rA, rB ]
defs: [ rA ]
uses: [ frS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfdx
desc: Store Floating-Point Double Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0005ae
2022-04-06 16:20:28 -07:00
args: [ frS, rA, rB ]
uses: [ frS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfiwx
desc: Store Floating-Point as Integer Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0007ae
2022-04-06 16:20:28 -07:00
args: [ frS, rA, rB ]
uses: [ frS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfs
desc: Store Floating-Point Single
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xd0000000
2022-04-06 17:36:49 -07:00
args: [ frS, offset, rA ]
uses: [ frS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfsu
desc: Store Floating-Point Single with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xd4000000
2022-04-06 17:36:49 -07:00
args: [ frS, offset, rA ]
2022-04-06 16:20:28 -07:00
defs: [ rA ]
2022-04-06 17:36:49 -07:00
uses: [ frS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfsux
desc: Store Floating-Point Single with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00056e
2022-04-06 16:20:28 -07:00
args: [ frS, rA, rB ]
defs: [ rA ]
uses: [ frS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stfsx
desc: Store Floating-Point Single Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00052e
2022-04-06 16:20:28 -07:00
args: [ frS, rA, rB ]
uses: [ frS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sth
desc: Store Half Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xb0000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
uses: [ rS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sthbrx
desc: Store Half Word Byte-Reverse Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00072c
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sthu
desc: Store Half Word with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xb4000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
defs: [ rA ]
uses: [ rS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sthux
desc: Store Half Word with Update Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00036e
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
defs: [ rA ]
uses: [ rS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sthx
desc: Store Half Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00032e
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stmw
desc: Store Multiple Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0xbc000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
uses: [ rS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stswi
desc: Store String Word Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c0005aa
2022-04-06 16:20:28 -07:00
args: [ rS, rA, NB ]
uses: [ rS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stswx
desc: Store String Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00052a
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stw
desc: Store Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x90000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
uses: [ rS, rA.nz ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stwbrx
desc: Store Word Byte-Reverse Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00052c
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stwcx.
desc: Store Word Conditional Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00012d
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stwu
desc: Store Word with Update
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x94000000
2022-04-06 16:20:28 -07:00
args: [ rS, offset, rA ]
defs: [ rA ]
uses: [ rS, rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stwux
desc: Store Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00016e
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
defs: [ rA ]
uses: [ rS, rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: stwx
desc: Store Word Indexed
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c00012e
2022-04-06 16:20:28 -07:00
args: [ rS, rA, rB ]
uses: [ rS, rA.nz, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subf
desc: Subtract From Carrying
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c000050
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subfc
desc: Subtract from Carrying
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c000010
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subfe
desc: Subtract from Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0003fe
pattern: 0x7c000110
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA, rB ]
defs: [ rD ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subfic
desc: Subtract from Immediate Carrying
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x20000000
2022-04-06 16:20:28 -07:00
args: [ rD, rA, simm ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subfme
desc: Subtract from Minus One Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fbfe
pattern: 0x7c0001d0
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: subfze
desc: Subtract from Zero Extended
2021-08-23 17:17:01 -07:00
bitmask: 0xfc00fbfe
pattern: 0x7c000190
2022-04-06 16:20:28 -07:00
modifiers: [ OE, Rc ]
args: [ rD, rA ]
defs: [ rD ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: sync
desc: Synchronize
2021-08-23 17:17:01 -07:00
bitmask: 0xffffffff
pattern: 0x7c0004ac
2022-04-06 16:20:28 -07:00
- name: tlbie
desc: Translation Lookaside Buffer Invalidate Entry
2021-08-23 17:17:01 -07:00
bitmask: 0xffff07ff
pattern: 0x7c000264
2022-04-06 16:20:28 -07:00
args: [ rB ]
uses: [ rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: tlbsync
desc: TLB Synchronize
2021-08-23 17:17:01 -07:00
bitmask: 0xffffffff
pattern: 0x7c00046c
2022-04-06 16:20:28 -07:00
- name: tw
desc: Trap Word
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007ff
pattern: 0x7c000008
2022-04-06 16:20:28 -07:00
args: [ TO, rA, rB ]
uses: [ rA, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: twi
desc: Trap Word Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
2022-12-11 20:47:35 -08:00
pattern: 0x0c000000
2022-04-06 16:20:28 -07:00
args: [ TO, rA, simm ]
uses: [ rA ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: xor
desc: XOR
2021-08-23 17:17:01 -07:00
bitmask: 0xfc0007fe
pattern: 0x7c000278
modifiers: [ Rc ]
2022-04-06 16:20:28 -07:00
args: [ rA, rS, rB ]
defs: [ rA ]
uses: [ rS, rB ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: xori
desc: XOR Immediate
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x68000000
2022-04-06 16:20:28 -07:00
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
2022-04-06 16:20:28 -07:00
- name: xoris
desc: XOR Immediate Shifted
2021-08-23 17:17:01 -07:00
bitmask: 0xfc000000
pattern: 0x6c000000
2022-04-06 16:20:28 -07:00
args: [ rA, rS, uimm ]
defs: [ rA ]
uses: [ rS ]
2021-08-23 17:17:01 -07:00
mnemonics:
2021-08-23 18:30:03 -07:00
# Arithmetic
2022-04-06 16:20:28 -07:00
- name: lis
opcode: addis
args: [ rD, uimm ]
condition: rA == 0
2022-04-06 16:20:28 -07:00
- name: li
opcode: addi
args: [ rD, simm ]
condition: rA == 0
2022-04-06 16:20:28 -07:00
- name: mr
opcode: or
args: [ rA, rS ]
condition: rS == rB
- name: nop
opcode: ori
condition: rA == 0 && rS == 0 && uimm == 0
2021-08-23 18:30:03 -07:00
# Rotates/Shifts
- name: rotlw
opcode: rlwnm
args: [ rA, rS, rB ]
condition: MB == 0 && ME == 31
# TODO rlwimi: inslwi/insrwi
# Rotates/Shifts Immediate
- name: clrrwi
opcode: rlwinm
args: [ rA, rS, ME=31-ME ]
condition: SH == 0 && MB == 0 && ME < 32
2022-04-06 16:20:28 -07:00
- name: clrlwi
opcode: rlwinm
args: [ rA, rS, MB ]
condition: SH == 0 && ME == 31
- name: rotlwi
opcode: rlwinm
args: [ rA, rS, SH ]
condition: MB == 0 && ME == 31 && SH <= 16
- name: rotrwi
opcode: rlwinm
args: [ rA, rS, SH=32-SH ]
condition: MB == 0 && ME == 31 && SH > 16
2022-04-06 16:20:28 -07:00
- name: slwi
opcode: rlwinm
args: [ rA, rS, SH ]
2022-04-06 16:20:28 -07:00
condition: MB == 0 && 31 - SH == ME
- name: srwi
opcode: rlwinm
args: [ rA, rS, MB ]
condition: ME == 31 && 32 - MB == SH
2022-10-16 11:21:50 -07:00
- name: clrlslwi
opcode: rlwinm
args: [ rA, rS, MB=MB+SH, SH ]
condition: SH < 32 && ME == 31 - SH
- name: extlwi
opcode: rlwinm
args: [ rA, rS, ME=ME+1, SH ]
condition: MB == 0
- name: extrwi
opcode: rlwinm
args: [ rA, rS, MB=32-MB, SH=SH-(32-MB) ]
condition: ME == 31 && SH >= 32 - MB
2021-08-23 18:30:03 -07:00
# Compares Word
- name: cmpwi
opcode: cmpi
args: [ rA, simm ]
condition: crfD == 0 && L == 0
- name: cmpwi
opcode: cmpi
args: [ crfD, rA, simm ]
condition: L == 0
2022-04-06 16:20:28 -07:00
- name: cmpw
opcode: cmp
args: [ rA, rB ]
condition: crfD == 0 && L == 0
2022-04-06 16:20:28 -07:00
- name: cmpw
opcode: cmp
args: [ crfD, rA, rB ]
condition: L == 0
- name: cmplwi
opcode: cmpli
args: [ rA, uimm ]
condition: crfD == 0 && L == 0
- name: cmplwi
opcode: cmpli
args: [ crfD, rA, uimm ]
condition: L == 0
2022-04-06 16:20:28 -07:00
- name: cmplw
opcode: cmpl
args: [ rA, rB ]
condition: crfD == 0 && L == 0
2022-04-06 16:20:28 -07:00
- name: cmplw
opcode: cmpl
args: [ crfD, rA, rB ]
condition: L == 0
# Compares Doubleword
- name: cmpdi
2022-04-06 16:20:28 -07:00
opcode: cmpi
args: [ rA, simm ]
condition: crfD == 0 && L == 1
- name: cmpdi
2022-04-06 16:20:28 -07:00
opcode: cmpi
args: [ crfD, rA, simm ]
condition: L == 1
- name: cmpd
opcode: cmp
args: [ rA, rB ]
condition: crfD == 0 && L == 1
- name: cmpd
opcode: cmp
args: [ crfD, rA, rB ]
condition: L == 1
- name: cmpldi
2022-04-06 16:20:28 -07:00
opcode: cmpli
args: [ rA, uimm ]
condition: crfD == 0 && L == 1
- name: cmpldi
2022-04-06 16:20:28 -07:00
opcode: cmpli
args: [ crfD, rA, uimm ]
condition: L == 1
- name: cmpld
opcode: cmpl
args: [ rA, rB ]
condition: crfD == 0 && L == 1
- name: cmpld
opcode: cmpl
args: [ crfD, rA, rB ]
condition: L == 1
2021-08-23 18:30:03 -07:00
# Condition Register Logical
- name: crset
opcode: creqv
args: [ crbD ]
condition: crbD == crbA && crbD == crbB
- name: crclr
opcode: crxor
args: [ crbD ]
condition: crbD == crbA && crbD == crbB
- name: crmove
opcode: cror
args: [ crbD, crbA ]
condition: crbA == crbB
- name: crnot
opcode: crnor
args: [ crbD, crbA ]
condition: crbA == crbB
2021-08-23 18:30:03 -07:00
# Misc
2022-12-11 20:47:35 -08:00
- name: tweq
opcode: tw
args: [ rA, rB ]
condition: TO == 4
- name: twlge
opcode: tw
args: [ rA, rB ]
condition: TO == 5
- name: trap
opcode: tw
condition: TO == 31 && rA == 0 && rB == 0
2022-04-06 16:20:28 -07:00
- name: twgti
opcode: twi
args: [ rA, simm ]
condition: TO == 8
2022-04-06 16:20:28 -07:00
- name: twllei
opcode: twi
args: [ rA, simm ]
condition: TO == 6
2022-04-06 16:20:28 -07:00
- name: twui
2022-12-11 20:47:35 -08:00
opcode: twi
2022-04-06 16:20:28 -07:00
args: [ rA, simm ]
condition: TO == 31
2021-08-23 18:30:03 -07:00
# Move to special-purpose register
2022-04-06 16:20:28 -07:00
- name: mtxer
opcode: mtspr
args: [ rS ]
condition: spr == 1
2022-04-06 16:20:28 -07:00
- name: mtlr
opcode: mtspr
args: [ rS ]
condition: spr == 8
2022-04-06 16:20:28 -07:00
- name: mtctr
opcode: mtspr
args: [ rS ]
condition: spr == 9
2022-04-06 16:20:28 -07:00
- name: mtdsisr
opcode: mtspr
args: [ rS ]
condition: spr == 18
- name: mtdar
opcode: mtspr
args: [ rS ]
condition: spr == 19
- name: mtdec
opcode: mtspr
args: [ rS ]
condition: spr == 22
- name: mtsdr1
opcode: mtspr
args: [ rS ]
condition: spr == 25
- name: mtsrr0
opcode: mtspr
args: [ rS ]
condition: spr == 26
- name: mtsrr1
opcode: mtspr
args: [ rS ]
condition: spr == 27
- name: mtsprg
opcode: mtspr
args: [ spr_SPRG, rS ]
condition: spr & 0b1111111100 == 272
- name: mtear
opcode: mtspr
args: [ rS ]
condition: spr == 282
- name: mttbl
opcode: mtspr
args: [ rS ]
condition: spr == 284
- name: mttbu
2022-04-06 16:20:28 -07:00
opcode: mtspr
args: [ rS ]
condition: spr == 285
- name: mtibatu
opcode: mtspr
args: [ spr_BAT, rS ]
condition: spr & 0b1111111001 == 528
- name: mtibatl
opcode: mtspr
args: [ spr_BAT, rS ]
condition: spr & 0b1111111001 == 529
- name: mtdbatu
opcode: mtspr
args: [ spr_BAT, rS ]
condition: spr & 0b1111111001 == 536
- name: mtdbatl
opcode: mtspr
args: [ spr_BAT, rS ]
condition: spr & 0b1111111001 == 537
2021-08-23 18:30:03 -07:00
# Move from special-purpose register
2022-04-06 16:20:28 -07:00
- name: mfxer
opcode: mfspr
args: [ rD ]
condition: spr == 1
2022-04-06 16:20:28 -07:00
- name: mflr
opcode: mfspr
args: [ rD ]
condition: spr == 8
2022-04-06 16:20:28 -07:00
- name: mfctr
opcode: mfspr
args: [ rD ]
condition: spr == 9
2022-04-06 16:20:28 -07:00
- name: mfdsisr
opcode: mfspr
args: [ rD ]
condition: spr == 18
- name: mfdar
opcode: mfspr
args: [ rD ]
condition: spr == 19
- name: mfdec
opcode: mfspr
args: [ rD ]
condition: spr == 22
- name: mfsdr1
opcode: mfspr
args: [ rD ]
condition: spr == 25
- name: mfsrr0
2022-04-06 16:20:28 -07:00
opcode: mfspr
args: [ rD ]
condition: spr == 26
- name: mfsrr1
opcode: mfspr
args: [ rD ]
condition: spr == 27
- name: mfsprg
opcode: mfspr
args: [ rD, spr_SPRG ]
condition: spr & 0b1111111100 == 272
- name: mfear
opcode: mfspr
args: [ rD ]
condition: spr == 282
- name: mfibatu
opcode: mfspr
args: [ rD, spr_BAT ]
condition: spr & 0b1111111001 == 528
- name: mfibatl
opcode: mfspr
args: [ rD, spr_BAT ]
condition: spr & 0b1111111001 == 529
- name: mfdbatu
opcode: mfspr
args: [ rD, spr_BAT ]
condition: spr & 0b1111111001 == 536
- name: mfdbatl
opcode: mfspr
args: [ rD, spr_BAT ]
condition: spr & 0b1111111001 == 537
2021-08-23 17:17:01 -07:00
# Branch Conditional
2022-04-06 19:23:12 -07:00
# bc branch if negative
- name: blt
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 12 && BI == 0
2022-04-06 16:20:28 -07:00
- name: blt
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 0
2022-04-06 19:23:12 -07:00
# bc branch if not positive
- name: ble
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 4 && BI == 1
2022-04-06 16:20:28 -07:00
- name: ble
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 1
2022-04-06 19:23:12 -07:00
# bc branch if zero
- name: beq
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 12 && BI == 2
2022-04-06 16:20:28 -07:00
- name: beq
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 2
2022-04-06 19:23:12 -07:00
# bc branch if not negative
- name: bge
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 4 && BI == 0
2022-04-06 16:20:28 -07:00
- name: bge
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 0
2022-04-06 19:23:12 -07:00
# bc branch if positive
- name: bgt
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 12 && BI == 1
2022-04-06 16:20:28 -07:00
- name: bgt
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 1
2022-04-06 19:23:12 -07:00
# bc branch if not zero
- name: bne
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 4 && BI == 2
2022-04-06 16:20:28 -07:00
- name: bne
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 2
2022-04-06 19:23:12 -07:00
# bc branch if summary overflow
- name: bso
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 12 && BI == 3
2022-04-06 16:20:28 -07:00
- name: bso
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 3
2022-04-06 19:23:12 -07:00
# bc branch if not summary overflow
- name: bns
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 4 && BI == 3
2022-04-06 16:20:28 -07:00
- name: bns
opcode: bc
args: [ crfS, BD ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 3
2022-04-06 19:23:12 -07:00
# bc decrement CTR, branch if CTR non-zero
2022-04-06 16:20:28 -07:00
- name: bdnz
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 16 && BI == 0
# bc decrement CTR, branch if CTR non-zero AND condition true
- name: bdnzt
opcode: bc
args: [ BI, BD ]
condition: BO & 0b11110 == 8
# bc decrement CTR, branch if CTR non-zero AND condition false
- name: bdnzf
opcode: bc
args: [ BI, BD ]
condition: BO & 0b11110 == 0
# bc decrement CTR, branch if CTR zero
2022-04-06 16:20:28 -07:00
- name: bdz
opcode: bc
args: [ BD ]
condition: BO & 0b11110 == 18 && BI == 0
# bc decrement CTR, branch if CTR zero AND condition true
- name: bdzt
opcode: bc
args: [ BI, BD ]
condition: BO & 0b11110 == 10
# bc decrement CTR, branch if CTR zero AND condition false
- name: bdzf
opcode: bc
args: [ BI, BD ]
condition: BO & 0b11110 == 2
2021-08-23 17:17:01 -07:00
# Branch Conditional to Count Register
2022-04-06 19:44:38 -07:00
# bcctr branch always
- name: bctr
opcode: bcctr
modifiers: [ LK ]
condition: BO == 20 && BI == 0
# bcctr branch if negative
2022-04-06 16:20:28 -07:00
- name: bltctr
opcode: bcctr
condition: BO & 0b11110 == 12 && BI == 0
2022-04-06 19:44:38 -07:00
- name: bltctr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 0
2022-04-06 19:44:38 -07:00
# bcctr branch if not positive
2022-04-06 16:20:28 -07:00
- name: blectr
opcode: bcctr
condition: BO & 0b11110 == 4 && BI == 1
2022-04-06 19:44:38 -07:00
- name: blectr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 1
2022-04-06 19:44:38 -07:00
# bcctr branch if zero
2022-04-06 16:20:28 -07:00
- name: beqctr
opcode: bcctr
condition: BO & 0b11110 == 12 && BI == 2
2022-04-06 19:44:38 -07:00
- name: beqctr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 2
2022-04-06 19:44:38 -07:00
# bcctr branch if not negative
2022-04-06 16:20:28 -07:00
- name: bgectr
opcode: bcctr
condition: BO & 0b11110 == 4 && BI == 0
2022-04-06 19:44:38 -07:00
- name: bgectr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 0
2022-04-06 19:44:38 -07:00
# bcctr branch if positive
2022-04-06 16:20:28 -07:00
- name: bgtctr
opcode: bcctr
condition: BO & 0b11110 == 12 && BI == 1
2022-04-06 19:44:38 -07:00
- name: bgtctr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 1
2022-04-06 19:44:38 -07:00
# bcctr branch if not zero
2022-04-06 16:20:28 -07:00
- name: bnectr
opcode: bcctr
condition: BO & 0b11110 == 4 && BI == 2
2022-04-06 19:44:38 -07:00
- name: bnectr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 2
2022-04-06 19:44:38 -07:00
# bcctr branch if summary overflow
2022-04-06 16:20:28 -07:00
- name: bsoctr
opcode: bcctr
condition: BO & 0b11110 == 12 && BI == 3
2022-04-06 19:44:38 -07:00
- name: bsoctr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 3
2022-04-06 19:44:38 -07:00
# bcctr branch if not summary overflow
2022-04-06 16:20:28 -07:00
- name: bnsctr
opcode: bcctr
condition: BO & 0b11110 == 4 && BI == 3
2022-04-06 19:44:38 -07:00
- name: bnsctr
opcode: bcctr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 3
2021-08-23 17:17:01 -07:00
# Branch Conditional to Link Register
2022-04-06 19:44:38 -07:00
# bclr branch always
- name: blr
opcode: bclr
modifiers: [ LK ]
condition: BO == 20 && BI == 0
# bclr branch if negative
2022-04-06 16:20:28 -07:00
- name: bltlr
opcode: bclr
condition: BO & 0b11110 == 12 && BI == 0
2022-04-06 19:44:38 -07:00
- name: bltlr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 0
2022-04-06 19:44:38 -07:00
# bclr branch if not positive
2022-04-06 16:20:28 -07:00
- name: blelr
opcode: bclr
condition: BO & 0b11110 == 4 && BI == 1
2022-04-06 19:44:38 -07:00
- name: blelr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 1
2022-04-06 19:44:38 -07:00
# bclr branch if zero
2022-04-06 16:20:28 -07:00
- name: beqlr
opcode: bclr
condition: BO & 0b11110 == 12 && BI == 2
2022-04-06 19:44:38 -07:00
- name: beqlr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 2
2022-04-06 19:44:38 -07:00
# bclr branch if not negative
2022-04-06 16:20:28 -07:00
- name: bgelr
opcode: bclr
condition: BO & 0b11110 == 4 && BI == 0
2022-04-06 19:44:38 -07:00
- name: bgelr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 0
2022-04-06 19:44:38 -07:00
# bclr branch if positive
2022-04-06 16:20:28 -07:00
- name: bgtlr
opcode: bclr
condition: BO & 0b11110 == 12 && BI == 1
2022-04-06 19:44:38 -07:00
- name: bgtlr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 1
2022-04-06 19:44:38 -07:00
# bclr branch if not zero
2022-04-06 16:20:28 -07:00
- name: bnelr
opcode: bclr
condition: BO & 0b11110 == 4 && BI == 2
2022-04-06 19:44:38 -07:00
- name: bnelr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 2
2022-04-06 19:44:38 -07:00
# bclr branch if summary overflow
2022-04-06 16:20:28 -07:00
- name: bsolr
opcode: bclr
condition: BO & 0b11110 == 12 && BI == 3
2022-04-06 19:44:38 -07:00
- name: bsolr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 12 && BI & 0b11 == 3
2022-04-06 19:44:38 -07:00
# bclr branch if not summary overflow
2022-04-06 16:20:28 -07:00
- name: bnslr
opcode: bclr
condition: BO & 0b11110 == 4 && BI == 3
2022-04-06 19:44:38 -07:00
- name: bnslr
opcode: bclr
args: [ crfS ]
condition: BO & 0b11110 == 4 && BI & 0b11 == 3
# bclr decrement CTR, branch if CTR non-zero
- name: bdnzlr
opcode: bclr
condition: BO & 0b11110 == 16 && BI == 0
# bclr decrement CTR, branch if CTR non-zero AND condition true
- name: bdnztlr
opcode: bclr
args: [ BI ]
condition: BO & 0b11110 == 8
# bclr decrement CTR, branch if CTR non-zero AND condition false
- name: bdnzflr
opcode: bclr
args: [ BI ]
condition: BO & 0b11110 == 0
# bclr decrement CTR, branch if CTR zero
- name: bdzlr
opcode: bclr
condition: BO & 0b11110 == 18 && BI == 0
# bclr decrement CTR, branch if CTR zero AND condition true
- name: bdztlr
opcode: bclr
args: [ BI ]
condition: BO & 0b11110 == 10
# bclr decrement CTR, branch if CTR zero AND condition false
- name: bdzflr
opcode: bclr
args: [ BI ]
condition: BO & 0b11110 == 0