-! Copyright (C) 2005, 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: compiler.codegen.fixup kernel namespaces words
-io.binary math math.order cpu.ppc.assembler.backend ;
+! Copyright (C) 2011 Erik Charlebois.
+! See https://factorcode.org/license.txt for BSD license.
+USING: endian kernel make math math.bitwise ;
IN: cpu.ppc.assembler
-! See the Motorola or IBM documentation for details. The opcode
-! names are standard, and the operand order is the same as in
-! the docs, except a few differences, namely, in IBM/Motorola
-! assembler syntax, loads and stores are written like:
-!
-! stw r14,10(r15)
+! This vocabulary implements the V2.06B Power ISA found at https://www.power.org.
+! The names are standard and the operand order is the same as in the specification,
+! except that displacement in d-form and ds-form instructions come after the base
+! address register.
!
+! For example, in assembler syntax, stores are written like:
+! stw r14,10(r15)
! In Factor, we write:
-!
-! 14 15 10 STW
-
-! D-form
-D: ADDI 14
-D: ADDIC 12
-D: ADDIC. 13
-D: ADDIS 15
-D: CMPI 11
-D: CMPLI 10
-D: LBZ 34
-D: LBZU 35
-D: LFD 50
-D: LFDU 51
-D: LFS 48
-D: LFSU 49
-D: LHA 42
-D: LHAU 43
-D: LHZ 40
-D: LHZU 41
-D: LWZ 32
-D: LWZU 33
-D: MULI 7
-D: MULLI 7
-D: STB 38
-D: STBU 39
-D: STFD 54
-D: STFDU 55
-D: STFS 52
-D: STFSU 53
-D: STH 44
-D: STHU 45
-D: STW 36
-D: STWU 37
-
-! SD-form
-SD: ANDI 28
-SD: ANDIS 29
-SD: ORI 24
-SD: ORIS 25
-SD: XORI 26
-SD: XORIS 27
-
-! X-form
-X: AND 0 28 31
-X: AND. 1 28 31
-X: CMP 0 0 31
-X: CMPL 0 32 31
-X: EQV 0 284 31
-X: EQV. 1 284 31
-X: FCMPO 0 32 63
-X: FCMPU 0 0 63
-X: LBZUX 0 119 31
-X: LBZX 0 87 31
-X: LHAUX 0 375 31
-X: LHAX 0 343 31
-X: LHZUX 0 311 31
-X: LHZX 0 279 31
-X: LWZUX 0 55 31
-X: LWZX 0 23 31
-X: NAND 0 476 31
-X: NAND. 1 476 31
-X: NOR 0 124 31
-X: NOR. 1 124 31
-X: OR 0 444 31
-X: OR. 1 444 31
-X: ORC 0 412 31
-X: ORC. 1 412 31
-X: SLW 0 24 31
-X: SLW. 1 24 31
-X: SRAW 0 792 31
-X: SRAW. 1 792 31
-X: SRAWI 0 824 31
-X: SRW 0 536 31
-X: SRW. 1 536 31
-X: STBUX 0 247 31
-X: STBX 0 215 31
-X: STHUX 0 439 31
-X: STHX 0 407 31
-X: STWUX 0 183 31
-X: STWX 0 151 31
-X: XOR 0 316 31
-X: XOR. 1 316 31
-X1: EXTSB 0 954 31
-X1: EXTSB. 1 954 31
-: FMR ( a s -- ) 0 -rot 72 0 63 x-insn ;
-: FMR. ( a s -- ) 0 -rot 72 1 63 x-insn ;
-: FCTIWZ ( a s -- ) 0 -rot 0 15 63 x-insn ;
-: FCTIWZ. ( a s -- ) 0 -rot 1 15 63 x-insn ;
-
-! XO-form
-XO: ADD 0 0 266 31
-XO: ADD. 0 1 266 31
-XO: ADDC 0 0 10 31
-XO: ADDC. 0 1 10 31
-XO: ADDCO 1 0 10 31
-XO: ADDCO. 1 1 10 31
-XO: ADDE 0 0 138 31
-XO: ADDE. 0 1 138 31
-XO: ADDEO 1 0 138 31
-XO: ADDEO. 1 1 138 31
-XO: ADDO 1 0 266 31
-XO: ADDO. 1 1 266 31
-XO: DIVW 0 0 491 31
-XO: DIVW. 0 1 491 31
-XO: DIVWO 1 0 491 31
-XO: DIVWO. 1 1 491 31
-XO: DIVWU 0 0 459 31
-XO: DIVWU. 0 1 459 31
-XO: DIVWUO 1 0 459 31
-XO: DIVWUO. 1 1 459 31
-XO: MULHW 0 0 75 31
-XO: MULHW. 0 1 75 31
-XO: MULHWU 0 0 11 31
-XO: MULHWU. 0 1 11 31
-XO: MULLW 0 0 235 31
-XO: MULLW. 0 1 235 31
-XO: MULLWO 1 0 235 31
-XO: MULLWO. 1 1 235 31
-XO: SUBF 0 0 40 31
-XO: SUBF. 0 1 40 31
-XO: SUBFC 0 0 8 31
-XO: SUBFC. 0 1 8 31
-XO: SUBFCO 1 0 8 31
-XO: SUBFCO. 1 1 8 31
-XO: SUBFE 0 0 136 31
-XO: SUBFE. 0 1 136 31
-XO: SUBFEO 1 0 136 31
-XO: SUBFEO. 1 1 136 31
-XO: SUBFO 1 0 40 31
-XO: SUBFO. 1 1 40 31
-XO1: NEG 0 0 104 31
-XO1: NEG. 0 1 104 31
-XO1: NEGO 1 0 104 31
-XO1: NEGO. 1 1 104 31
-
-! A-form
-: RLWINM ( d a b c xo -- ) 0 21 a-insn ;
-: RLWINM. ( d a b c xo -- ) 1 21 a-insn ;
-: FADD ( d a b -- ) 0 21 0 63 a-insn ;
-: FADD. ( d a b -- ) 0 21 1 63 a-insn ;
-: FSUB ( d a b -- ) 0 20 0 63 a-insn ;
-: FSUB. ( d a b -- ) 0 20 1 63 a-insn ;
-: FMUL ( d a c -- ) 0 swap 25 0 63 a-insn ;
-: FMUL. ( d a c -- ) 0 swap 25 1 63 a-insn ;
-: FDIV ( d a b -- ) 0 18 0 63 a-insn ;
-: FDIV. ( d a b -- ) 0 18 1 63 a-insn ;
-: FSQRT ( d b -- ) 0 swap 0 22 0 63 a-insn ;
-: FSQRT. ( d b -- ) 0 swap 0 22 1 63 a-insn ;
-
-! Branches
-: B ( dest -- ) 0 0 (B) ;
-: BL ( dest -- ) 0 1 (B) ;
-BC: LT 12 0
-BC: GE 4 0
-BC: GT 12 1
-BC: LE 4 1
-BC: EQ 12 2
-BC: NE 4 2
-BC: O 12 3
-BC: NO 4 3
-B: CLR 0 8 0 0 19
-B: CLRL 0 8 0 1 19
-B: CCTR 0 264 0 0 19
-: BLR ( -- ) 20 BCLR ;
-: BLRL ( -- ) 20 BCLRL ;
-: BCTR ( -- ) 20 BCCTR ;
-
-! Special registers
-MFSPR: XER 1
-MFSPR: LR 8
-MFSPR: CTR 9
-MTSPR: XER 1
-MTSPR: LR 8
-MTSPR: CTR 9
-
-! Pseudo-instructions
-: LI 0 rot ADDI ; inline
-: SUBI neg ADDI ; inline
-: LIS 0 rot ADDIS ; inline
-: SUBIC neg ADDIC ; inline
-: SUBIC. neg ADDIC. ; inline
-: NOT dup NOR ; inline
-: NOT. dup NOR. ; inline
-: MR dup OR ; inline
-: MR. dup OR. ; inline
-: (SLWI) 0 31 pick - ; inline
-: SLWI ( d a b -- ) (SLWI) RLWINM ;
-: SLWI. ( d a b -- ) (SLWI) RLWINM. ;
-: (SRWI) 32 over - swap 31 ; inline
-: SRWI ( d a b -- ) (SRWI) RLWINM ;
-: SRWI. ( d a b -- ) (SRWI) RLWINM. ;
-: LOAD32 ( n r -- ) >r w>h/h r> tuck LIS dup rot ORI ;
-: immediate? ( n -- ? ) HEX: -8000 HEX: 7fff between? ;
-: LOAD ( n r -- ) over immediate? [ LI ] [ LOAD32 ] if ;
+! 14 15 10 STW
+
+: insn ( operand opcode -- )
+ { 26 0 } bitfield 4 >be % ;
+
+: a-insn ( rt ra rb rc xo rc opcode -- )
+ [ { 0 1 6 11 16 21 } bitfield ] dip insn ;
+
+: b-insn ( bo bi bd aa lk opcode -- )
+ [ { 0 1 2 16 21 } bitfield ] dip insn ;
+
+: d-insn ( rt ra d opcode -- )
+ [ 0xffff bitand { 0 16 21 } bitfield ] dip insn ;
+
+: ds-insn ( rt ra ds rc opcode -- )
+ [ [ 0x3fff bitand ] dip { 0 2 16 21 } bitfield ] dip insn ;
+
+: evx-insn ( rt ra rb xo opcode -- )
+ [ { 0 11 16 21 } bitfield ] dip insn ;
+
+: i-insn ( li aa lk opcode -- )
+ [ { 0 1 2 } bitfield ] dip insn ;
+
+: m-insn ( rs ra sh mb me rc opcode -- )
+ [ { 0 1 6 11 16 21 } bitfield ] dip insn ;
+
+:: md-insn ( rs ra sh mb xo sh5 rc opcode -- )
+ mb [ 0x1f bitand 1 shift ] [ -5 shift ] bi bitor :> mb
+ rs ra sh mb xo sh5 rc opcode
+ [ { 0 1 2 5 11 16 21 } bitfield ] dip insn ;
+
+:: mds-insn ( rs ra rb mb xo rc opcode -- )
+ mb [ 0x1f bitand 1 shift ] [ -5 shift ] bi bitor :> mb
+ rs ra rb mb xo rc opcode
+ [ { 0 1 5 11 16 21 } bitfield ] dip insn ;
+
+: sc-insn ( lev opcode -- )
+ [ 1 { 1 5 } bitfield ] dip insn ;
+
+: va-insn ( vrt vra vrb vrc xo opcode -- )
+ [ { 0 6 11 16 21 } bitfield ] dip insn ;
+
+: vc-insn ( vrt vra vrb rc xo opcode -- )
+ [ { 0 10 11 16 21 } bitfield ] dip insn ;
+
+: vx-insn ( vrt vra vrb xo opcode -- )
+ [ { 0 11 16 21 } bitfield ] dip insn ;
+
+: x-insn ( rt ra rb xo rc opcode -- )
+ [ { 0 1 11 16 21 } bitfield ] dip insn ;
+
+: xfl-insn ( l flm w frb xo rc opcode -- )
+ [ { 0 1 11 16 17 25 } bitfield ] dip insn ;
+
+: xfx-insn ( rs spr xo rc opcode -- )
+ [ { 0 1 11 21 } bitfield ] dip insn ;
+
+: xl-insn ( bo bi bb xo lk opcode -- )
+ [ { 0 1 11 16 21 } bitfield ] dip insn ;
+
+: xo-insn ( rt ra rb oe xo rc opcode -- )
+ [ { 0 1 10 11 16 21 } bitfield ] dip insn ;
+
+: xs-insn ( rs ra sh xo sh5 rc opcode -- )
+ [ { 0 1 2 11 16 21 } bitfield ] dip insn ;
+
+:: xx1-insn ( rt ra rb xo opcode -- )
+ rt 0x1f bitand ra rb xo rt -5 shift
+ { 0 1 11 16 21 } bitfield opcode insn ;
+
+:: xx2-insn ( rt ra rb xo opcode -- )
+ rt 0x1f bitand ra rb 0x1f bitand xo
+ rb -5 shift rt -5 shift
+ { 0 1 2 11 16 21 } bitfield opcode insn ;
+
+:: xx3-insn ( rt ra rb xo opcode -- )
+ rt 0x1f bitand ra 0x1f bitand rb 0x1f bitand
+ xo ra -5 shift rb -5 shift rt -5 shift
+ { 0 1 2 3 11 16 21 } bitfield opcode insn ;
+
+:: xx3-rc-insn ( rt ra rb rc xo opcode -- )
+ rt 0x1f bitand ra 0x1f bitand rb 0x1f bitand
+ rc xo ra -5 shift rb -5 shift rt -5 shift
+ { 0 1 2 3 10 11 16 21 } bitfield opcode insn ;
+
+:: xx3-rc-dm-insn ( rt ra rb rc dm xo opcode -- )
+ rt 0x1f bitand ra 0x1f bitand rb 0x1f bitand
+ rc dm xo ra -5 shift rb -5 shift rt -5 shift
+ { 0 1 2 3 8 10 11 16 21 } bitfield opcode insn ;
+
+:: xx4-insn ( rt ra rb rc xo opcode -- )
+ rt 0x1f bitand ra 0x1f bitand rb 0x1f bitand
+ rc 0x1f bitand xo rc -5 shift ra -5 shift rb
+ -5 shift rt -5 shift
+ { 0 1 2 3 4 6 11 16 21 } bitfield opcode insn ;
+
+: z22-insn ( bf fra dcm xo rc opcode -- )
+ [ { 0 1 10 16 21 } bitfield ] dip insn ;
+
+: z23-insn ( frt te frb rmc xo rc opcode -- )
+ [ { 0 1 9 11 16 21 } bitfield ] dip insn ;
+
+! 2.4 Branch Instructions
+GENERIC: B ( target_addr/label -- )
+M: integer B -2 shift 0 0 18 i-insn ;
+
+GENERIC: BL ( target_addr/label -- )
+M: integer BL -2 shift 0 1 18 i-insn ;
+
+: BA ( target_addr -- ) -2 shift 1 0 18 i-insn ;
+: BLA ( target_addr -- ) -2 shift 1 1 18 i-insn ;
+
+GENERIC: BC ( bo bi target_addr/label -- )
+M: integer BC -2 shift 0 0 16 b-insn ;
+
+: BCA ( bo bi target_addr -- ) -2 shift 1 0 16 b-insn ;
+: BCL ( bo bi target_addr -- ) -2 shift 0 1 16 b-insn ;
+: BCLA ( bo bi target_addr -- ) -2 shift 1 1 16 b-insn ;
+
+: BCLR ( bo bi bh -- ) 16 0 19 xl-insn ;
+: BCLRL ( bo bi bh -- ) 16 1 19 xl-insn ;
+: BCCTR ( bo bi bh -- ) 528 0 19 xl-insn ;
+: BCCTRL ( bo bi bh -- ) 528 1 19 xl-insn ;
+
+! 2.5.1 Condition Register Logical Instructions
+: CRAND ( bt ba bb -- ) 527 0 19 xl-insn ;
+: CRNAND ( bt ba bb -- ) 225 0 19 xl-insn ;
+: CROR ( bt ba bb -- ) 449 0 19 xl-insn ;
+: CRXOR ( bt ba bb -- ) 193 0 19 xl-insn ;
+: CRNOR ( bt ba bb -- ) 33 0 19 xl-insn ;
+: CREQV ( bt ba bb -- ) 289 0 19 xl-insn ;
+: CRANDC ( bt ba bb -- ) 129 0 19 xl-insn ;
+: CRORC ( bt ba bb -- ) 417 0 19 xl-insn ;
+
+! 2.5.2 Condition Register Field Instruction
+: MCRF ( bf bfa -- ) [ 2 shift ] bi@ 0 0 0 19 xl-insn ;
+
+! 2.6 System Call Instruction
+: SC ( lev -- ) 17 sc-insn ;
+
+! 3.3.2 Fixed-Point Load Instructions
+: LBZ ( rt ra d -- ) 34 d-insn ;
+: LBZU ( rt ra d -- ) 35 d-insn ;
+: LHZ ( rt ra d -- ) 40 d-insn ;
+: LHZU ( rt ra d -- ) 41 d-insn ;
+: LHA ( rt ra d -- ) 42 d-insn ;
+: LHAU ( rt ra d -- ) 43 d-insn ;
+: LWZ ( rt ra d -- ) 32 d-insn ;
+: LWZU ( rt ra d -- ) 33 d-insn ;
+: LBZX ( rt ra rb -- ) 87 0 31 x-insn ;
+: LBZUX ( rt ra rb -- ) 119 0 31 x-insn ;
+: LHZX ( rt ra rb -- ) 279 0 31 x-insn ;
+: LHZUX ( rt ra rb -- ) 311 0 31 x-insn ;
+: LHAX ( rt ra rb -- ) 343 0 31 x-insn ;
+: LHAUX ( rt ra rb -- ) 375 0 31 x-insn ;
+: LWZX ( rt ra rb -- ) 23 0 31 x-insn ;
+: LWZUX ( rt ra rb -- ) 55 0 31 x-insn ;
+
+! 3.3.2.1 64-bit Fixed-Point Load Instructions
+: LWA ( rt ra ds -- ) -2 shift 2 58 ds-insn ;
+: LD ( rt ra ds -- ) -2 shift 0 58 ds-insn ;
+: LDU ( rt ra ds -- ) -2 shift 1 58 ds-insn ;
+: LWAX ( rt ra rb -- ) 341 0 31 x-insn ;
+: LWAUX ( rt ra rb -- ) 373 0 31 x-insn ;
+: LDX ( rt ra rb -- ) 21 0 31 x-insn ;
+: LDUX ( rt ra rb -- ) 53 0 31 x-insn ;
+
+! 3.3.3 Fixed-Point Store Instructions
+: STB ( rs ra d -- ) 38 d-insn ;
+: STBU ( rs ra d -- ) 39 d-insn ;
+: STH ( rs ra d -- ) 44 d-insn ;
+: STHU ( rs ra d -- ) 45 d-insn ;
+: STW ( rs ra d -- ) 36 d-insn ;
+: STWU ( rs ra d -- ) 37 d-insn ;
+: STBX ( rs ra rb -- ) 215 0 31 x-insn ;
+: STBUX ( rs ra rb -- ) 247 0 31 x-insn ;
+: STHX ( rs ra rb -- ) 407 0 31 x-insn ;
+: STHUX ( rs ra rb -- ) 439 0 31 x-insn ;
+: STWX ( rs ra rb -- ) 151 0 31 x-insn ;
+: STWUX ( rs ra rb -- ) 183 0 31 x-insn ;
+
+! 3.3.3.1 64-bit Fixed-Point Store Instructions
+: STD ( rs ra ds -- ) -2 shift 0 62 ds-insn ;
+: STDU ( rs ra ds -- ) -2 shift 1 62 ds-insn ;
+: STDX ( rs ra rb -- ) 149 0 31 x-insn ;
+: STDUX ( rs ra rb -- ) 181 0 31 x-insn ;
+
+! 3.3.4 Fixed-Point Load and Store with Byte Reversal Instructions
+: LHBRX ( rt ra rb -- ) 790 0 31 x-insn ;
+: LWBRX ( rt ra rb -- ) 534 0 31 x-insn ;
+: STHBRX ( rs ra rb -- ) 918 0 31 x-insn ;
+: STWBRX ( rs ra rb -- ) 662 0 31 x-insn ;
+
+! 3.3.4.1 64-bit Fixed-Point Load and Store with Byte Reversal Instructions
+: LDBRX ( rt ra rb -- ) 532 0 31 x-insn ;
+: STDBRX ( rs ra rb -- ) 660 0 31 x-insn ;
+
+! 3.3.5 Fixed-Point Load and Store Multiple Instructions
+: LMW ( rt ra d -- ) 46 d-insn ;
+: STMW ( rs ra d -- ) 47 d-insn ;
+
+! 3.3.6 Fixed-Point Move Assist Instructions
+: LSWI ( rt ra nb -- ) 597 0 31 x-insn ;
+: LSWX ( rt ra rb -- ) 533 0 31 x-insn ;
+: STSWI ( rs ra nb -- ) 725 0 31 x-insn ;
+: STSWX ( rs ra rb -- ) 661 0 31 x-insn ;
+
+! 3.3.8 Fixed-Point Arithmetic Instructions
+: ADDI ( rt ra si -- ) 14 d-insn ;
+: ADDIS ( rt ra si -- ) 15 d-insn ;
+: ADDIC ( rt ra si -- ) 12 d-insn ;
+: ADDIC. ( rt ra si -- ) 13 d-insn ;
+: SUBFIC ( rt ra si -- ) 8 d-insn ;
+: MULLI ( rt ra si -- ) 7 d-insn ;
+: ADD ( rt ra rb -- ) 0 266 0 31 xo-insn ;
+: ADD. ( rt ra rb -- ) 0 266 1 31 xo-insn ;
+: ADDO ( rt ra rb -- ) 1 266 0 31 xo-insn ;
+: ADDO. ( rt ra rb -- ) 1 266 1 31 xo-insn ;
+: ADDC ( rt ra rb -- ) 0 10 0 31 xo-insn ;
+: ADDC. ( rt ra rb -- ) 0 10 1 31 xo-insn ;
+: ADDCO ( rt ra rb -- ) 1 10 0 31 xo-insn ;
+: ADDCO. ( rt ra rb -- ) 1 10 1 31 xo-insn ;
+: ADDE ( rt ra rb -- ) 0 138 0 31 xo-insn ;
+: ADDE. ( rt ra rb -- ) 0 138 1 31 xo-insn ;
+: ADDEO ( rt ra rb -- ) 1 138 0 31 xo-insn ;
+: ADDEO. ( rt ra rb -- ) 1 138 1 31 xo-insn ;
+: ADDME ( rt ra -- ) 0 0 234 0 31 xo-insn ;
+: ADDME. ( rt ra -- ) 0 0 234 1 31 xo-insn ;
+: ADDMEO ( rt ra -- ) 0 1 234 0 31 xo-insn ;
+: ADDMEO. ( rt ra -- ) 0 1 234 1 31 xo-insn ;
+: ADDZE ( rt ra -- ) 0 0 202 0 31 xo-insn ;
+: ADDZE. ( rt ra -- ) 0 0 202 1 31 xo-insn ;
+: ADDZEO ( rt ra -- ) 0 1 202 0 31 xo-insn ;
+: ADDZEO. ( rt ra -- ) 0 1 202 1 31 xo-insn ;
+: SUBF ( rt ra rb -- ) 0 40 0 31 xo-insn ;
+: SUBF. ( rt ra rb -- ) 0 40 1 31 xo-insn ;
+: SUBFO ( rt ra rb -- ) 1 40 0 31 xo-insn ;
+: SUBFO. ( rt ra rb -- ) 1 40 1 31 xo-insn ;
+: SUBFC ( rt ra rb -- ) 0 8 0 31 xo-insn ;
+: SUBFC. ( rt ra rb -- ) 0 8 1 31 xo-insn ;
+: SUBFCO ( rt ra rb -- ) 1 8 0 31 xo-insn ;
+: SUBFCO. ( rt ra rb -- ) 1 8 1 31 xo-insn ;
+: SUBFE ( rt ra rb -- ) 0 136 0 31 xo-insn ;
+: SUBFE. ( rt ra rb -- ) 0 136 1 31 xo-insn ;
+: SUBFEO ( rt ra rb -- ) 1 136 0 31 xo-insn ;
+: SUBFEO. ( rt ra rb -- ) 1 136 1 31 xo-insn ;
+: SUBFME ( rt ra -- ) 0 0 232 0 31 xo-insn ;
+: SUBFME. ( rt ra -- ) 0 0 232 1 31 xo-insn ;
+: SUBFMEO ( rt ra -- ) 0 1 232 0 31 xo-insn ;
+: SUBFMEO. ( rt ra -- ) 0 1 232 1 31 xo-insn ;
+: SUBFZE ( rt ra -- ) 0 0 200 0 31 xo-insn ;
+: SUBFZE. ( rt ra -- ) 0 0 200 1 31 xo-insn ;
+: SUBFZEO ( rt ra -- ) 0 1 200 0 31 xo-insn ;
+: SUBFZEO. ( rt ra -- ) 0 1 200 1 31 xo-insn ;
+: NEG ( rt ra -- ) 0 0 104 0 31 xo-insn ;
+: NEG. ( rt ra -- ) 0 0 104 1 31 xo-insn ;
+: NEGO ( rt ra -- ) 0 1 104 0 31 xo-insn ;
+: NEGO. ( rt ra -- ) 0 1 104 1 31 xo-insn ;
+: MULLW ( rt ra rb -- ) 0 235 0 31 xo-insn ;
+: MULLW. ( rt ra rb -- ) 0 235 1 31 xo-insn ;
+: MULLWO ( rt ra rb -- ) 1 235 0 31 xo-insn ;
+: MULLWO. ( rt ra rb -- ) 1 235 1 31 xo-insn ;
+: MULHW ( rt ra rb -- ) 0 75 0 31 xo-insn ;
+: MULHW. ( rt ra rb -- ) 0 75 1 31 xo-insn ;
+: MULHWU ( rt ra rb -- ) 0 11 0 31 xo-insn ;
+: MULHWU. ( rt ra rb -- ) 0 11 1 31 xo-insn ;
+: DIVW ( rt ra rb -- ) 0 491 0 31 xo-insn ;
+: DIVW. ( rt ra rb -- ) 0 491 1 31 xo-insn ;
+: DIVWO ( rt ra rb -- ) 1 491 0 31 xo-insn ;
+: DIVWO. ( rt ra rb -- ) 1 491 1 31 xo-insn ;
+: DIVWU ( rt ra rb -- ) 0 459 0 31 xo-insn ;
+: DIVWU. ( rt ra rb -- ) 0 459 1 31 xo-insn ;
+: DIVWUO ( rt ra rb -- ) 1 459 0 31 xo-insn ;
+: DIVWUO. ( rt ra rb -- ) 1 459 1 31 xo-insn ;
+: DIVWE ( rt ra rb -- ) 0 427 0 31 xo-insn ;
+: DIVWE. ( rt ra rb -- ) 0 427 1 31 xo-insn ;
+: DIVWEO ( rt ra rb -- ) 1 427 0 31 xo-insn ;
+: DIVWEO. ( rt ra rb -- ) 1 427 1 31 xo-insn ;
+: DIVWEU ( rt ra rb -- ) 0 395 0 31 xo-insn ;
+: DIVWEU. ( rt ra rb -- ) 0 395 1 31 xo-insn ;
+: DIVWEUO ( rt ra rb -- ) 1 395 0 31 xo-insn ;
+: DIVWEUO. ( rt ra rb -- ) 1 395 1 31 xo-insn ;
+
+! 3.3.8.1 64-bit Fixed-Point Arithmetic Instructions
+: MULLD ( rt ra rb -- ) 0 233 0 31 xo-insn ;
+: MULLD. ( rt ra rb -- ) 0 233 1 31 xo-insn ;
+: MULLDO ( rt ra rb -- ) 1 233 0 31 xo-insn ;
+: MULLDO. ( rt ra rb -- ) 1 233 1 31 xo-insn ;
+: MULHD ( rt ra rb -- ) 0 73 0 31 xo-insn ;
+: MULHD. ( rt ra rb -- ) 0 73 1 31 xo-insn ;
+: MULHDU ( rt ra rb -- ) 0 9 0 31 xo-insn ;
+: MULHDU. ( rt ra rb -- ) 0 9 1 31 xo-insn ;
+: DIVD ( rt ra rb -- ) 0 489 0 31 xo-insn ;
+: DIVD. ( rt ra rb -- ) 0 489 1 31 xo-insn ;
+: DIVDO ( rt ra rb -- ) 1 489 0 31 xo-insn ;
+: DIVDO. ( rt ra rb -- ) 1 489 1 31 xo-insn ;
+: DIVDU ( rt ra rb -- ) 0 457 0 31 xo-insn ;
+: DIVDU. ( rt ra rb -- ) 0 457 1 31 xo-insn ;
+: DIVDUO ( rt ra rb -- ) 1 457 0 31 xo-insn ;
+: DIVDUO. ( rt ra rb -- ) 1 457 1 31 xo-insn ;
+: DIVDE ( rt ra rb -- ) 0 425 0 31 xo-insn ;
+: DIVDE. ( rt ra rb -- ) 0 425 1 31 xo-insn ;
+: DIVDEO ( rt ra rb -- ) 1 425 0 31 xo-insn ;
+: DIVDEO. ( rt ra rb -- ) 1 425 1 31 xo-insn ;
+: DIVDEU ( rt ra rb -- ) 0 393 0 31 xo-insn ;
+: DIVDEU. ( rt ra rb -- ) 0 393 1 31 xo-insn ;
+: DIVDEUO ( rt ra rb -- ) 1 393 0 31 xo-insn ;
+: DIVDEUO. ( rt ra rb -- ) 1 393 1 31 xo-insn ;
+
+! 3.3.9 Fixed-Point Compare Instructions
+: CMPI ( bf l ra si -- ) [ [ 2 shift ] dip bitor ] 2dip 11 d-insn ;
+: CMPLI ( bf l ra ui -- ) [ [ 2 shift ] dip bitor ] 2dip 10 d-insn ;
+: CMP ( bf l ra rb -- ) [ [ 2 shift ] dip bitor ] 2dip 0 0 31 x-insn ;
+: CMPL ( bf l ra rb -- ) [ [ 2 shift ] dip bitor ] 2dip 32 0 31 x-insn ;
+
+! 3.3.10 Fixed-Point Trap Instructions
+: TWI ( to ra si -- ) 3 d-insn ;
+: TDI ( to ra si -- ) 2 d-insn ;
+: TW ( to ra rb -- ) 4 0 31 x-insn ;
+: TD ( to ra rb -- ) 68 0 31 x-insn ;
+
+! 3.3.11 Fixed-Point Select
+: ISEL ( rt ra rb bc -- ) 15 0 31 a-insn ;
+
+! 3.3.12 Fixed-Point Logical Instructions
+: ANDI. ( ra rs ui -- ) swapd 28 d-insn ;
+: ANDIS. ( ra rs ui -- ) swapd 29 d-insn ;
+: ORI ( ra rs ui -- ) swapd 24 d-insn ;
+: ORIS ( ra rs ui -- ) swapd 25 d-insn ;
+: XORI ( ra rs ui -- ) swapd 26 d-insn ;
+: XORIS ( ra rs ui -- ) swapd 27 d-insn ;
+: AND ( ra rs rb -- ) swapd 28 0 31 x-insn ;
+: AND. ( ra rs rb -- ) swapd 28 1 31 x-insn ;
+: OR ( ra rs rb -- ) swapd 444 0 31 x-insn ;
+: OR. ( ra rs rb -- ) swapd 444 1 31 x-insn ;
+: XOR ( ra rs rb -- ) swapd 316 0 31 x-insn ;
+: XOR. ( ra rs rb -- ) swapd 316 1 31 x-insn ;
+: NAND ( ra rs rb -- ) swapd 476 0 31 x-insn ;
+: NAND. ( ra rs rb -- ) swapd 476 1 31 x-insn ;
+: NOR ( ra rs rb -- ) swapd 124 0 31 x-insn ;
+: NOR. ( ra rs rb -- ) swapd 124 1 31 x-insn ;
+: ANDC ( ra rs rb -- ) swapd 60 0 31 x-insn ;
+: ANDC. ( ra rs rb -- ) swapd 60 1 31 x-insn ;
+: EQV ( ra rs rb -- ) swapd 284 0 31 x-insn ;
+: EQV. ( ra rs rb -- ) swapd 284 1 31 x-insn ;
+: ORC ( ra rs rb -- ) swapd 412 0 31 x-insn ;
+: ORC. ( ra rs rb -- ) swapd 412 1 31 x-insn ;
+: CMPB ( ra rs rb -- ) swapd 508 0 31 x-insn ;
+: EXTSB ( ra rs -- ) swap 0 954 0 31 x-insn ;
+: EXTSB. ( ra rs -- ) swap 0 954 1 31 x-insn ;
+: EXTSH ( ra rs -- ) swap 0 922 0 31 x-insn ;
+: EXTSH. ( ra rs -- ) swap 0 922 1 31 x-insn ;
+: CNTLZW ( ra rs -- ) swap 0 26 0 31 x-insn ;
+: CNTLZW. ( ra rs -- ) swap 0 26 1 31 x-insn ;
+: POPCNTB ( ra rs -- ) swap 0 122 0 31 x-insn ;
+: POPCNTW ( ra rs -- ) swap 0 378 0 31 x-insn ;
+: PRTYD ( ra rs -- ) swap 0 186 0 31 x-insn ;
+: PRTYW ( ra rs -- ) swap 0 154 0 31 x-insn ;
+
+! 3.3.12.1 64-bit Fixed-Point Logical Instructions
+: EXTSW ( ra rs -- ) swap 0 986 0 31 x-insn ;
+: EXTSW. ( ra rs -- ) swap 0 986 1 31 x-insn ;
+: CNTLZD ( ra rs -- ) swap 0 58 0 31 x-insn ;
+: CNTLZD. ( ra rs -- ) swap 0 58 1 31 x-insn ;
+: POPCNTD ( ra rs -- ) swap 0 506 0 31 x-insn ;
+: BPERMD ( ra rs rb -- ) swapd 252 0 31 x-insn ;
+
+! 3.3.13.1 Fixed-Point Rotate and Shift Instructions
+: RLWINM ( ra rs sh mb me -- ) [ swap ] 3dip 0 21 m-insn ;
+: RLWINM. ( ra rs sh mb me -- ) [ swap ] 3dip 1 21 m-insn ;
+: RLWNM ( ra rs rb mb me -- ) [ swap ] 3dip 0 23 m-insn ;
+: RLWNM. ( ra rs rb mb me -- ) [ swap ] 3dip 1 23 m-insn ;
+: RLWIMI ( ra rs sh mb me -- ) [ swap ] 3dip 0 20 m-insn ;
+: RLWIMI. ( ra rs sh mb me -- ) [ swap ] 3dip 1 20 m-insn ;
+
+! 3.3.13.1 64-bit Fixed-Point Rotate Instructions
+: RLDICL ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 0 swap 0 30 md-insn ;
+: RLDICL. ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 0 swap 1 30 md-insn ;
+: RLDICR ( ra rs sh me -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 1 swap 0 30 md-insn ;
+: RLDICR. ( ra rs sh me -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 1 swap 1 30 md-insn ;
+: RLDIC ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 2 swap 0 30 md-insn ;
+: RLDIC. ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 2 swap 1 30 md-insn ;
+: RLDCL ( ra rs rb mb -- ) [ swap ] 2dip 8 0 30 mds-insn ;
+: RLDCL. ( ra rs rb mb -- ) [ swap ] 2dip 8 1 30 mds-insn ;
+: RLDCR ( ra rs rb me -- ) [ swap ] 2dip 9 0 30 mds-insn ;
+: RLDCR. ( ra rs rb me -- ) [ swap ] 2dip 9 1 30 mds-insn ;
+: RLDIMI ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 3 swap 0 30 md-insn ;
+: RLDIMI. ( ra rs sh mb -- )
+ [ swap ] 2dip over [ 0x1f bitand ] [ ] [ -5 shift ]
+ tri* 3 swap 1 30 md-insn ;
+
+! 3.3.13.2 Fixed-Point Shift Instructions
+: SLW ( ra rs rb -- ) swapd 24 0 31 x-insn ;
+: SLW. ( ra rs rb -- ) swapd 24 1 31 x-insn ;
+: SRW ( ra rs rb -- ) swapd 536 0 31 x-insn ;
+: SRW. ( ra rs rb -- ) swapd 536 1 31 x-insn ;
+: SRAWI ( ra rs sh -- ) swapd 824 0 31 x-insn ;
+: SRAWI. ( ra rs sh -- ) swapd 824 1 31 x-insn ;
+: SRAW ( ra rs rb -- ) swapd 792 0 31 x-insn ;
+: SRAW. ( ra rs rb -- ) swapd 792 1 31 x-insn ;
+
+! 3.3.13.2.1 64-bit Fixed-Point Shift Instructions
+: SLD ( ra rs rb -- ) swapd 27 0 31 x-insn ;
+: SLD. ( ra rs rb -- ) swapd 27 1 31 x-insn ;
+: SRD ( ra rs rb -- ) swapd 539 0 31 x-insn ;
+: SRD. ( ra rs rb -- ) swapd 539 1 31 x-insn ;
+: SRAD ( ra rs rb -- ) swapd 794 0 31 x-insn ;
+: SRAD. ( ra rs rb -- ) swapd 794 1 31 x-insn ;
+: SRADI ( ra rs sh -- )
+ swapd [ 0x1f bitand ] [ -5 shift ] bi
+ 413 swap 0 31 xs-insn ;
+: SRADI. ( ra rs sh -- )
+ swapd [ 0x1f bitand ] [ -5 shift ] bi
+ 413 swap 1 31 xs-insn ;
+
+! 3.3.14 BCD Assist Instructions
+: CDTBCD ( ra rs -- ) swap 0 282 0 31 x-insn ;
+: CBCDTD ( ra rs -- ) swap 0 314 0 31 x-insn ;
+: ADDG6S ( rt ra rb -- ) 0 74 0 31 xo-insn ;
+
+! 3.3.15 Move To/From System Register Instructions
+: MTSPR ( spr rs -- ) swap 467 0 31 xfx-insn ;
+: MFSPR ( rt spr -- ) 339 0 31 xfx-insn ;
+: MTCRF ( fxm rs -- ) swap 0xff bitand 1 shift 144 0 31 xfx-insn ;
+: MFCR ( rt -- ) 0 19 0 31 xfx-insn ;
+
+! 3.3.15.1 Move To/From One Condition Register Field Instructions
+: MTOCRF ( fxm rs -- ) swap 0x100 bitor 1 shift 144 0 31 xfx-insn ;
+: MFOCRF ( rt fxm -- ) 0x100 bitor 1 shift 19 0 31 xfx-insn ;
+
+! 3.3.15.2 Move To/From System Registers (Category: Embedded)
+: MCRXR ( bf -- ) 2 shift 0 0 512 0 31 x-insn ;
+: MTDCRUX ( rs ra -- ) 0 419 0 31 x-insn ;
+: MFDCRUX ( rt ra -- ) 0 291 0 31 x-insn ;
+
+! 4.6.2 Floating-Point Load Instructions
+: LFS ( frt ra d -- ) 48 d-insn ;
+: LFSU ( frt ra d -- ) 49 d-insn ;
+: LFD ( frt ra d -- ) 50 d-insn ;
+: LFDU ( frt ra d -- ) 51 d-insn ;
+: LFSX ( frt ra rb -- ) 535 0 31 x-insn ;
+: LFSUX ( frt ra rb -- ) 567 0 31 x-insn ;
+: LFDX ( frt ra rb -- ) 599 0 31 x-insn ;
+: LFDUX ( frt ra rb -- ) 631 0 31 x-insn ;
+: LFIWAX ( frt ra rb -- ) 855 0 31 x-insn ;
+: LFIWZX ( frt ra rb -- ) 887 0 31 x-insn ;
+
+! 4.6.3 Floating-Point Store Instructions
+: STFS ( frs ra d -- ) 52 d-insn ;
+: STFSU ( frs ra d -- ) 53 d-insn ;
+: STFD ( frs ra d -- ) 54 d-insn ;
+: STFDU ( frs ra d -- ) 55 d-insn ;
+: STFSX ( frs ra rb -- ) 663 0 31 x-insn ;
+: STFSUX ( frs ra rb -- ) 695 0 31 x-insn ;
+: STFDX ( frs ra rb -- ) 727 0 31 x-insn ;
+: STFDUX ( frs ra rb -- ) 759 0 31 x-insn ;
+: STFIWX ( frs ra rb -- ) 983 0 31 x-insn ;
+
+! 4.6.4 Floating-Point Load Store Doubleword Pair Instructions
+: LFDP ( frtp ra ds -- ) 0 57 ds-insn ; deprecated
+: STFDP ( frsp ra ds -- ) 0 61 ds-insn ; deprecated
+: LFDPX ( frtp ra rb -- ) 791 0 31 x-insn ; deprecated
+: STFDPX ( frsp ra rb -- ) 919 0 31 x-insn ; deprecated
+
+! 4.6.5 Floating-Point Move Instructions
+: FMR ( frt frb -- ) [ 0 ] dip 72 0 63 x-insn ;
+: FMR. ( frt frb -- ) [ 0 ] dip 72 1 63 x-insn ;
+: FABS ( frt frb -- ) [ 0 ] dip 264 0 63 x-insn ;
+: FABS. ( frt frb -- ) [ 0 ] dip 264 1 63 x-insn ;
+: FNABS ( frt frb -- ) [ 0 ] dip 136 0 63 x-insn ;
+: FNABS. ( frt frb -- ) [ 0 ] dip 136 1 63 x-insn ;
+: FNEG ( frt frb -- ) [ 0 ] dip 40 0 63 x-insn ;
+: FNEG. ( frt frb -- ) [ 0 ] dip 40 1 63 x-insn ;
+: FCPSGN ( frt fra frb -- ) 8 0 63 x-insn ;
+: FCPSGN. ( frt fra frb -- ) 8 1 63 x-insn ;
+
+! 4.6.6.1 Floating-Point Elementary Arithmetic Instructions
+: FADD ( frt fra frb -- ) 0 21 0 63 a-insn ;
+: FADD. ( frt fra frb -- ) 0 21 1 63 a-insn ;
+: FADDS ( frt fra frb -- ) 0 21 0 59 a-insn ;
+: FADDS. ( frt fra frb -- ) 0 21 1 59 a-insn ;
+: FSUB ( frt fra frb -- ) 0 20 0 63 a-insn ;
+: FSUB. ( frt fra frb -- ) 0 20 1 63 a-insn ;
+: FSUBS ( frt fra frb -- ) 0 20 0 59 a-insn ;
+: FSUBS. ( frt fra frb -- ) 0 20 1 59 a-insn ;
+: FMUL ( frt fra frc -- ) 0 swap 25 0 63 a-insn ;
+: FMUL. ( frt fra frc -- ) 0 swap 25 1 63 a-insn ;
+: FMULS ( frt fra frb -- ) 0 25 0 59 a-insn ;
+: FMULS. ( frt fra frb -- ) 0 25 1 59 a-insn ;
+: FDIV ( frt fra frb -- ) 0 18 0 63 a-insn ;
+: FDIV. ( frt fra frb -- ) 0 18 1 63 a-insn ;
+: FDIVS ( frt fra frb -- ) 0 18 0 59 a-insn ;
+: FDIVS. ( frt fra frb -- ) 0 18 1 59 a-insn ;
+: FSQRT ( frt frb -- ) [ 0 ] dip 0 22 0 63 a-insn ;
+: FSQRT. ( frt frb -- ) [ 0 ] dip 0 22 1 63 a-insn ;
+: FSQRTS ( frt frb -- ) [ 0 ] dip 0 22 0 59 a-insn ;
+: FSQRTS. ( frt frb -- ) [ 0 ] dip 0 22 1 59 a-insn ;
+: FRE ( frt frb -- ) [ 0 ] dip 0 24 0 63 a-insn ;
+: FRE. ( frt frb -- ) [ 0 ] dip 0 24 1 63 a-insn ;
+: FRES ( frt frb -- ) [ 0 ] dip 0 24 0 59 a-insn ;
+: FRES. ( frt frb -- ) [ 0 ] dip 0 24 1 59 a-insn ;
+: FRSQRTE ( frt frb -- ) [ 0 ] dip 0 26 0 63 a-insn ;
+: FRSQRTE. ( frt frb -- ) [ 0 ] dip 0 26 1 63 a-insn ;
+: FRSQRTES ( frt frb -- ) [ 0 ] dip 0 26 0 59 a-insn ;
+: FRSQRTES. ( frt frb -- ) [ 0 ] dip 0 26 1 59 a-insn ;
+: FTDIV ( bf fra frb -- ) [ 2 shift ] 2dip 128 0 63 x-insn ;
+: FTSQRT ( bf frb -- ) [ 2 shift 0 ] dip 160 0 63 x-insn ;
+
+! 4.6.6.2 Floating-Point Multiply-Add Instructions
+: FMADD ( frt fra frc frb -- ) swap 29 0 63 a-insn ;
+: FMADD. ( frt fra frc frb -- ) swap 29 1 63 a-insn ;
+: FMADDS ( frt fra frc frb -- ) swap 29 0 59 a-insn ;
+: FMADDS. ( frt fra frc frb -- ) swap 29 1 59 a-insn ;
+: FMSUB ( frt fra frc frb -- ) swap 28 0 63 a-insn ;
+: FMSUB. ( frt fra frc frb -- ) swap 28 1 63 a-insn ;
+: FMSUBS ( frt fra frc frb -- ) swap 28 0 59 a-insn ;
+: FMSUBS. ( frt fra frc frb -- ) swap 28 1 59 a-insn ;
+: FNMADD ( frt fra frc frb -- ) swap 31 0 63 a-insn ;
+: FNMADD. ( frt fra frc frb -- ) swap 31 1 63 a-insn ;
+: FNMADDS ( frt fra frc frb -- ) swap 31 0 59 a-insn ;
+: FNMADDS. ( frt fra frc frb -- ) swap 31 1 59 a-insn ;
+: FNMSUB ( frt fra frc frb -- ) swap 30 0 63 a-insn ;
+: FNMSUB. ( frt fra frc frb -- ) swap 30 1 63 a-insn ;
+: FNMSUBS ( frt fra frc frb -- ) swap 30 0 59 a-insn ;
+: FNMSUBS. ( frt fra frc frb -- ) swap 30 1 59 a-insn ;
+
+! 4.6.7.1 Floating-Point Rounding Instruction
+: FRSP ( frt frb -- ) [ 0 ] dip 12 0 63 x-insn ;
+: FRSP. ( frt frb -- ) [ 0 ] dip 12 1 63 x-insn ;
+
+! 4.6.7.2 Floating-Point Convert To/From Integer Instructions
+: FCTID ( frt frb -- ) [ 0 ] dip 814 0 63 x-insn ;
+: FCTID. ( frt frb -- ) [ 0 ] dip 814 1 63 x-insn ;
+: FCTIDZ ( frt frb -- ) [ 0 ] dip 815 0 63 x-insn ;
+: FCTIDZ. ( frt frb -- ) [ 0 ] dip 815 1 63 x-insn ;
+: FCTIDU ( frt frb -- ) [ 0 ] dip 942 0 63 x-insn ;
+: FCTIDU. ( frt frb -- ) [ 0 ] dip 942 1 63 x-insn ;
+: FCTIDUZ ( frt frb -- ) [ 0 ] dip 943 0 63 x-insn ;
+: FCTIDUZ. ( frt frb -- ) [ 0 ] dip 943 1 63 x-insn ;
+: FCTIW ( frt frb -- ) [ 0 ] dip 14 0 63 x-insn ;
+: FCTIW. ( frt frb -- ) [ 0 ] dip 14 1 63 x-insn ;
+: FCTIWZ ( frt frb -- ) [ 0 ] dip 15 0 63 x-insn ;
+: FCTIWZ. ( frt frb -- ) [ 0 ] dip 15 1 63 x-insn ;
+: FCTIWU ( frt frb -- ) [ 0 ] dip 142 0 63 x-insn ;
+: FCTIWU. ( frt frb -- ) [ 0 ] dip 142 1 63 x-insn ;
+: FCTIWUZ ( frt frb -- ) [ 0 ] dip 143 0 63 x-insn ;
+: FCTIWUZ. ( frt frb -- ) [ 0 ] dip 143 1 63 x-insn ;
+: FCFID ( frt frb -- ) [ 0 ] dip 846 0 63 x-insn ;
+: FCFID. ( frt frb -- ) [ 0 ] dip 846 1 63 x-insn ;
+: FCFIDU ( frt frb -- ) [ 0 ] dip 974 0 63 x-insn ;
+: FCFIDU. ( frt frb -- ) [ 0 ] dip 974 1 63 x-insn ;
+: FCFIDS ( frt frb -- ) [ 0 ] dip 846 0 59 x-insn ;
+: FCFIDS. ( frt frb -- ) [ 0 ] dip 846 1 59 x-insn ;
+: FCFIDUS ( frt frb -- ) [ 0 ] dip 974 0 59 x-insn ;
+: FCFIDUS. ( frt frb -- ) [ 0 ] dip 974 1 59 x-insn ;
+
+! 4.6.7.3 Floating Round to Integer Instructions
+: FRIN ( frt frb -- ) [ 0 ] dip 392 0 63 x-insn ;
+: FRIN. ( frt frb -- ) [ 0 ] dip 392 1 63 x-insn ;
+: FRIZ ( frt frb -- ) [ 0 ] dip 424 0 63 x-insn ;
+: FRIZ. ( frt frb -- ) [ 0 ] dip 424 1 63 x-insn ;
+: FRIP ( frt frb -- ) [ 0 ] dip 456 0 63 x-insn ;
+: FRIP. ( frt frb -- ) [ 0 ] dip 456 1 63 x-insn ;
+: FRIM ( frt frb -- ) [ 0 ] dip 488 0 63 x-insn ;
+: FRIM. ( frt frb -- ) [ 0 ] dip 488 1 63 x-insn ;
+
+! 4.6.8 Floating-Point Compare Instructions
+: FCMPU ( bf fra frb -- ) [ 2 shift ] 2dip 0 0 63 x-insn ;
+: FCMPO ( bf fra frb -- ) [ 2 shift ] 2dip 32 0 63 x-insn ;
+
+! 4.6.9 Floating-Point Select Instruction
+: FSEL ( frt fra frc frb -- ) swap 23 0 63 a-insn ;
+: FSEL. ( frt fra frc frb -- ) swap 23 1 63 a-insn ;
+
+! 4.6.10 Floating-Point Status and Control Register Instructions
+: MFFS ( frt -- ) 0 0 583 0 63 x-insn ;
+: MFFS. ( frt -- ) 0 0 583 1 63 x-insn ;
+: MCRFS ( bf bfa -- ) [ 2 shift ] bi@ 0 64 0 63 x-insn ;
+: MTFSFI ( bf u w -- ) swap [ 2 shift ] [ 1 bitand ] [ 1 shift ]
+tri* 134 0 63 x-insn ;
+: MTFSFI. ( bf u w -- ) swap [ 2 shift ] [ 1 bitand ] [ 1 shift ]
+tri* 134 1 63 x-insn ;
+:: MTFSF ( flm frb l w -- ) l flm w frb 711 0 63 xfl-insn ;
+:: MTFSF. ( flm frb l w -- ) l flm w frb 711 1 63 xfl-insn ;
+: MTFSB0 ( bt -- ) 0 0 70 0 63 x-insn ;
+: MTFSB0. ( bt -- ) 0 0 70 1 63 x-insn ;
+: MTFSB1 ( bt -- ) 0 0 38 0 63 x-insn ;
+: MTFSB1. ( bt -- ) 0 0 38 1 63 x-insn ;
+
+! 5.6.1 DFP Arithmetic Instructions
+: DADD ( frt fra frb -- ) 2 0 59 x-insn ;
+: DADD. ( frt fra frb -- ) 2 1 59 x-insn ;
+: DADDQ ( frtp frap frbp -- ) 2 0 63 x-insn ;
+: DADDQ. ( frtp frap frbp -- ) 2 1 63 x-insn ;
+: DSUB ( frt fra frb -- ) 514 0 59 x-insn ;
+: DSUB. ( frt fra frb -- ) 514 1 59 x-insn ;
+: DSUBQ ( frtp frap frbp -- ) 514 0 63 x-insn ;
+: DSUBQ. ( frtp frap frbp -- ) 514 1 63 x-insn ;
+: DMUL ( frp fra frb -- ) 34 0 59 x-insn ;
+: DMUL. ( frt fra frb -- ) 34 1 59 x-insn ;
+: DMULQ ( frtp frap frbp -- ) 34 0 63 x-insn ;
+: DMULQ. ( frtp frap frbp -- ) 34 1 63 x-insn ;
+: DDIV ( frp fra frb -- ) 546 0 59 x-insn ;
+: DDIV. ( frt fra frb -- ) 546 1 59 x-insn ;
+: DDIVQ ( frtp frap frbp -- ) 546 0 63 x-insn ;
+: DDIVQ. ( frtp frap frbp -- ) 546 1 63 x-insn ;
+
+! 5.6.2 DFP Compare Instructions
+: DCMPU ( bf fra frb -- ) [ 2 shift ] 2dip 642 0 59 x-insn ;
+: DCMPUQ ( bf frap frbp -- ) [ 2 shift ] 2dip 642 0 63 x-insn ;
+: DCMPO ( bf fra frb -- ) [ 2 shift ] 2dip 130 0 59 x-insn ;
+: DCMPOQ ( bf frap frbp -- ) [ 2 shift ] 2dip 130 0 63 x-insn ;
+
+! 5.6.3 DFP Test Instructions
+: DTSTDC ( bf fra dcm -- ) [ 2 shift ] 2dip 194 0 59 z22-insn ;
+: DTSTDCQ ( bf frap dgm -- ) [ 2 shift ] 2dip 194 0 63 z22-insn ;
+: DTSTDG ( bf fra dcm -- ) [ 2 shift ] 2dip 226 0 59 z22-insn ;
+: DTSTDGQ ( bf frap dgm -- ) [ 2 shift ] 2dip 226 0 63 z22-insn ;
+: DTSTEX ( bf fra frb -- ) [ 2 shift ] 2dip 162 0 59 x-insn ;
+: DTSTEXQ ( bf frap frbp -- ) [ 2 shift ] 2dip 162 0 63 x-insn ;
+: DTSTSF ( bf fra frb -- ) [ 2 shift ] 2dip 674 0 59 x-insn ;
+: DTSTSFQ ( bf frap frbp -- ) [ 2 shift ] 2dip 674 0 63 x-insn ;
+
+! 5.6.4 DFP Quantum Adjustment Instructions
+: DQUAI ( te frt frb rmc -- ) [ swap ] 2dip 67 0 59 z23-insn ;
+: DQUAI. ( te frt frb rmc -- ) [ swap ] 2dip 67 1 59 z23-insn ;
+: DQUAIQ ( te frtp frbp rmc -- ) [ swap ] 2dip 67 0 63 z23-insn ;
+: DQUAIQ. ( te frtp frbp rmc -- ) [ swap ] 2dip 67 1 63 z23-insn ;
+: DQUA ( frt fra frb rmc -- ) 3 0 59 z23-insn ;
+: DQUA. ( frt fra frb rmc -- ) 3 1 59 z23-insn ;
+: DQUAQ ( frtp frap frbp rmc -- ) 3 0 63 z23-insn ;
+: DQUAQ. ( frtp frap frbp rmc -- ) 3 1 63 z23-insn ;
+: DRRND ( frt fra frb rmc -- ) 35 0 59 z23-insn ;
+: DRRND. ( frt fra frb rmc -- ) 35 1 59 z23-insn ;
+: DRRNDQ ( frtp frap frbp rmc -- ) 35 0 63 z23-insn ;
+: DRRNDQ. ( frtp frap frbp rmc -- ) 35 1 63 z23-insn ;
+: DRINTX ( r frt frb rmc -- ) [ swap ] 2dip 99 0 59 z23-insn ;
+: DRINTX. ( r frt frb rmc -- ) [ swap ] 2dip 99 1 59 z23-insn ;
+: DRINTXQ ( r frtp frbp rmc -- ) [ swap ] 2dip 99 0 63 z23-insn ;
+: DRINTXQ. ( r frtp frbp rmc -- ) [ swap ] 2dip 99 1 63 z23-insn ;
+: DRINTN ( r frt frb rmc -- ) [ swap ] 2dip 227 0 59 z23-insn ;
+: DRINTN. ( r frt frb rmc -- ) [ swap ] 2dip 227 1 59 z23-insn ;
+: DRINTNQ ( r frtp frbp rmc -- ) [ swap ] 2dip 227 0 63 z23-insn ;
+: DRINTNQ. ( r frtp frbp rmc -- ) [ swap ] 2dip 227 1 63 z23-insn ;
+
+! 5.6.5.1 DFP Data-Format Conversion Instructions
+: DCTDP ( frt frb -- ) 0 swap 258 0 59 x-insn ;
+: DCTDP. ( frt frb -- ) 0 swap 258 1 59 x-insn ;
+: DCTQPQ ( frtp frbp -- ) 0 swap 258 0 63 x-insn ;
+: DCTQPQ. ( frtp frbp -- ) 0 swap 258 1 63 x-insn ;
+: DSRP ( frt frb -- ) 0 swap 770 0 59 x-insn ;
+: DSRP. ( frt frb -- ) 0 swap 770 1 59 x-insn ;
+: DRDPQ ( frtp frbp -- ) 0 swap 770 0 63 x-insn ;
+: DRDPQ. ( frtp frbp -- ) 0 swap 770 1 63 x-insn ;
+
+! 5.6.5.2 DFP Data-Type Conversion Instructions
+: DCFFIX ( frt frb -- ) 0 swap 802 0 59 x-insn ;
+: DCFFIX. ( frt frb -- ) 0 swap 802 1 59 x-insn ;
+: DCFFIXQ ( frtp frbp -- ) 0 swap 802 0 63 x-insn ;
+: DCFFIXQ. ( frtp frbp -- ) 0 swap 802 1 63 x-insn ;
+: DCTFIX ( frt frb -- ) 0 swap 290 0 59 x-insn ;
+: DCTFIX. ( frt frb -- ) 0 swap 290 1 59 x-insn ;
+: DCTFIXQ ( frtp frbp -- ) 0 swap 290 0 63 x-insn ;
+: DCTFIXQ. ( frtp frbp -- ) 0 swap 290 1 63 x-insn ;
+
+! 5.6.6 DFP Format Instructions
+: DDEDPD ( sp frt frb -- ) [ swap 3 shift ] dip 322 0 59 x-insn ;
+: DDEDPD. ( sp frt frb -- ) [ swap 3 shift ] dip 322 1 59 x-insn ;
+: DDEDPDQ ( sp frtp frbp -- ) [ swap 3 shift ] dip 322 0 63 x-insn ;
+: DDEDPDQ. ( sp frtp frbp -- ) [ swap 3 shift ] dip 322 1 63 x-insn ;
+: DENBCD ( s frt frb -- ) [ swap 4 shift ] dip 834 0 59 x-insn ;
+: DENBCD. ( s frt frb -- ) [ swap 4 shift ] dip 834 1 59 x-insn ;
+: DENBCDQ ( s frtp frbp -- ) [ swap 4 shift ] dip 834 0 63 x-insn ;
+: DENBCDQ. ( s frtp frbp -- ) [ swap 4 shift ] dip 834 1 63 x-insn ;
+: DXEX ( frt frb -- ) 0 swap 354 0 59 x-insn ;
+: DXEX. ( frt frb -- ) 0 swap 354 1 59 x-insn ;
+: DXEXQ ( frtp frbp -- ) 0 swap 354 0 63 x-insn ;
+: DXEXQ. ( frtp frbp -- ) 0 swap 354 1 63 x-insn ;
+: DIEX ( frt fra frb -- ) 866 0 59 x-insn ;
+: DIEX. ( frt fra frb -- ) 866 1 59 x-insn ;
+: DIEXQ ( frtp frap frbp -- ) 866 0 63 x-insn ;
+: DIEXQ. ( frtp frap frbp -- ) 866 1 63 x-insn ;
+: DSCLI ( frt fra sh -- ) 66 0 59 z22-insn ;
+: DSCLI. ( frt fra sh -- ) 66 1 59 z22-insn ;
+: DSCLIQ ( frtp frap sh -- ) 66 0 63 z22-insn ;
+: DSCLIQ. ( frtp frap sh -- ) 66 1 63 z22-insn ;
+: DSCRI ( frt fra sh -- ) 98 0 59 z22-insn ;
+: DSCRI. ( frt fra sh -- ) 98 1 59 z22-insn ;
+: DSCRIQ ( frtp frap sh -- ) 98 0 63 z22-insn ;
+: DSCRIQ. ( frtp frap sh -- ) 98 1 63 z22-insn ;
+
+! 6.7.2 Vector Load Instructions
+: LVEBX ( vrt ra rb -- ) 7 0 31 x-insn ;
+: LVEHX ( vrt ra rb -- ) 39 0 31 x-insn ;
+: LVEWX ( vrt ra rb -- ) 71 0 31 x-insn ;
+: LVX ( vrt ra rb -- ) 103 0 31 x-insn ;
+: LVXL ( vrt ra rb -- ) 359 0 31 x-insn ;
+
+! 6.7.3 Vector Store Instructions
+: STVEBX ( vrs ra rb -- ) 135 0 31 x-insn ;
+: STVEHX ( vrs ra rb -- ) 167 0 31 x-insn ;
+: STVEWX ( vrs ra rb -- ) 199 0 31 x-insn ;
+: STVX ( vrs ra rb -- ) 231 0 31 x-insn ;
+: STVXL ( vrs ra rb -- ) 487 0 31 x-insn ;
+
+! 6.7.4 Vector Alignment Support Instructions
+: LVSL ( vrt ra rb -- ) 6 0 31 x-insn ;
+: LVSR ( vrt ra rb -- ) 38 0 31 x-insn ;
+
+! 6.8.1 Vector Pack and Unpack Instructions
+: VPKUHUM ( vrt vra vrb -- ) 14 4 vx-insn ;
+: VPKUWUM ( vrt vra vrb -- ) 78 4 vx-insn ;
+: VPKUHUS ( vrt vra vrb -- ) 142 4 vx-insn ;
+: VPKUWUS ( vrt vra vrb -- ) 206 4 vx-insn ;
+: VPKSHUS ( vrt vra vrb -- ) 270 4 vx-insn ;
+: VPKSWUS ( vrt vra vrb -- ) 334 4 vx-insn ;
+: VPKSHSS ( vrt vra vrb -- ) 398 4 vx-insn ;
+: VPKSWSS ( vrt vra vrb -- ) 462 4 vx-insn ;
+: VPKPX ( vrt vra vrb -- ) 782 4 vx-insn ;
+: VUPKHSB ( vrt vrb -- ) 0 swap 526 4 vx-insn ;
+: VUPKHSH ( vrt vrb -- ) 0 swap 590 4 vx-insn ;
+: VUPKLSB ( vrt vrb -- ) 0 swap 654 4 vx-insn ;
+: VUPKLSH ( vrt vrb -- ) 0 swap 718 4 vx-insn ;
+: VUPKHPX ( vrt vrb -- ) 0 swap 846 4 vx-insn ;
+: VUPKLPX ( vrt vrb -- ) 0 swap 974 4 vx-insn ;
+
+! 6.8.2 Vector Merge Instructions
+: VMRGHB ( vrt vra vrb -- ) 12 4 vx-insn ;
+: VMRGHH ( vrt vra vrb -- ) 76 4 vx-insn ;
+: VMRGHW ( vrt vra vrb -- ) 140 4 vx-insn ;
+: VMRGLB ( vrt vra vrb -- ) 268 4 vx-insn ;
+: VMRGLH ( vrt vra vrb -- ) 332 4 vx-insn ;
+: VMRGLW ( vrt vra vrb -- ) 396 4 vx-insn ;
+
+! 6.8.3 Vector Splat Instructions
+: VSPLTB ( vrt vrb uim -- ) swap 524 4 vx-insn ;
+: VSPLTH ( vrt vrb uim -- ) swap 588 4 vx-insn ;
+: VSPLTW ( vrt vrb uim -- ) swap 652 4 vx-insn ;
+: VSPLTISB ( vrt sim -- ) 0 780 4 vx-insn ;
+: VSPLTISH ( vrt sim -- ) 0 844 4 vx-insn ;
+: VSPLTISW ( vrt sim -- ) 0 908 4 vx-insn ;
+
+! 6.8.4 Vector Permute Instruction
+: VPERM ( vrt vra vrb vrc -- ) 43 4 va-insn ;
+
+! 6.8.5 Vector Select Instruction
+: VSEL ( vrt vra vrb vrc -- ) 42 4 va-insn ;
+
+! 6.8.6 Vector Shift Instructions
+: VSL ( vrt vra vrb -- ) 452 4 vx-insn ;
+: VSR ( vrt vra vrb -- ) 708 4 vx-insn ;
+: VSLO ( vrt vra vrb -- ) 1036 4 vx-insn ;
+: VSRO ( vrt vra vrb -- ) 1100 4 vx-insn ;
+: VSLDOI ( vrt vra vrb shb -- ) 44 4 va-insn ;
+
+! 6.9.1.1 Vector Integer Add Instructions
+: VADDCUW ( vrt vra vrb -- ) 384 4 vx-insn ;
+: VADDSHS ( vrt vra vrb -- ) 832 4 vx-insn ;
+: VADDSBS ( vrt vra vrb -- ) 768 4 vx-insn ;
+: VADDSWS ( vrt vra vrb -- ) 896 4 vx-insn ;
+: VADDUBM ( vrt vra vrb -- ) 0 4 vx-insn ;
+: VADDUHM ( vrt vra vrb -- ) 64 4 vx-insn ;
+: VADDUWM ( vrt vra vrb -- ) 128 4 vx-insn ;
+: VADDUBS ( vrt vra vrb -- ) 512 4 vx-insn ;
+: VADDUHS ( vrt vra vrb -- ) 576 4 vx-insn ;
+: VADDUWS ( vrt vra vrb -- ) 640 4 vx-insn ;
+
+! 6.9.1.2 Vector Integer Subtract Instructions
+: VSUBCUW ( vrt vra vrb -- ) 1408 4 vx-insn ;
+: VSUBSBS ( vrt vra vrb -- ) 1792 4 vx-insn ;
+: VSUBSHS ( vrt vra vrb -- ) 1856 4 vx-insn ;
+: VSUBSWS ( vrt vra vrb -- ) 1920 4 vx-insn ;
+: VSUBUBM ( vrt vra vrb -- ) 1024 4 vx-insn ;
+: VSUBUHM ( vrt vra vrb -- ) 1088 4 vx-insn ;
+: VSUBUWM ( vrt vra vrb -- ) 1152 4 vx-insn ;
+: VSUBUBS ( vrt vra vrb -- ) 1536 4 vx-insn ;
+: VSUBUHS ( vrt vra vrb -- ) 1600 4 vx-insn ;
+: VSUBUWS ( vrt vra vrb -- ) 1664 4 vx-insn ;
+
+! 6.9.1.3 Vector Integer Multiply Instructions
+: VMULESB ( vrt vra vrb -- ) 776 4 vx-insn ;
+: VMULESH ( vrt vra vrb -- ) 840 4 vx-insn ;
+: VMULEUB ( vrt vra vrb -- ) 520 4 vx-insn ;
+: VMULEUH ( vrt vra vrb -- ) 584 4 vx-insn ;
+: VMULOSB ( vrt vra vrb -- ) 264 4 vx-insn ;
+: VMULOSH ( vrt vra vrb -- ) 328 4 vx-insn ;
+: VMULOUB ( vrt vra vrb -- ) 8 4 vx-insn ;
+: VMULOUH ( vrt vra vrb -- ) 72 4 vx-insn ;
+
+! 6.9.1.4 Vector Integer Multiply-Add/Sum Instructions
+: VMHADDSHS ( vrt vra vrb vrc -- ) 32 4 va-insn ;
+: VMHRADDSHS ( vrt vra vrb vrc -- ) 33 4 va-insn ;
+: VMLADDUHM ( vrt vra vrb vrc -- ) 34 4 va-insn ;
+: VMSUMUBM ( vrt vra vrb vrc -- ) 36 4 va-insn ;
+: VMSUMMBM ( vrt vra vrb vrc -- ) 37 4 va-insn ;
+: VMSUMSHM ( vrt vra vrb vrc -- ) 40 4 va-insn ;
+: VMSUMSHS ( vrt vra vrb vrc -- ) 41 4 va-insn ;
+: VMSUMUHM ( vrt vra vrb vrc -- ) 38 4 va-insn ;
+: VMSUMUHS ( vrt vra vrb vrc -- ) 39 4 va-insn ;
+
+! 6.9.1.5 Vector Integer Sum-Across Intructions
+: VSUMSWS ( vrt vra vrb -- ) 1928 4 vx-insn ;
+: VSUM2SWS ( vrt vra vrb -- ) 1672 4 vx-insn ;
+: VSUM4SBS ( vrt vra vrb -- ) 1800 4 vx-insn ;
+: VSUM4UBS ( vrt vra vrb -- ) 1544 4 vx-insn ;
+: VSUM4SHS ( vrt vra vrb -- ) 1608 4 vx-insn ;
+
+! 6.9.1.6 Vector Integer Average Instructions
+: VAVGSB ( vrt vra vrb -- ) 1282 4 vx-insn ;
+: VAVGSH ( vrt vra vrb -- ) 1346 4 vx-insn ;
+: VAVGSW ( vrt vra vrb -- ) 1410 4 vx-insn ;
+: VAVGUB ( vrt vra vrb -- ) 1026 4 vx-insn ;
+: VAVGUH ( vrt vra vrb -- ) 1090 4 vx-insn ;
+: VAVGUW ( vrt vra vrb -- ) 1154 4 vx-insn ;
+
+! 6.9.1.7 Vector Integer Maximum and Minimum Instructions
+: VMAXSB ( vrt vra vrb -- ) 258 4 vx-insn ;
+: VMAXSH ( vrt vra vrb -- ) 322 4 vx-insn ;
+: VMAXSW ( vrt vra vrb -- ) 386 4 vx-insn ;
+: VMAXUB ( vrt vra vrb -- ) 2 4 vx-insn ;
+: VMAXUH ( vrt vra vrb -- ) 66 4 vx-insn ;
+: VMAXUW ( vrt vra vrb -- ) 130 4 vx-insn ;
+: VMINSB ( vrt vra vrb -- ) 770 4 vx-insn ;
+: VMINSH ( vrt vra vrb -- ) 834 4 vx-insn ;
+: VMINSW ( vrt vra vrb -- ) 898 4 vx-insn ;
+: VMINUB ( vrt vra vrb -- ) 514 4 vx-insn ;
+: VMINUH ( vrt vra vrb -- ) 578 4 vx-insn ;
+: VMINUW ( vrt vra vrb -- ) 642 4 vx-insn ;
+
+! 6.9.2 Vector Integer Compare Instructions
+: VCMPEQUB ( vrt vra vrb -- ) 0 6 4 vc-insn ;
+: VCMPEQUB. ( vrt vra vrb -- ) 1 6 4 vc-insn ;
+: VCMPEQUH ( vrt vra vrb -- ) 0 70 4 vc-insn ;
+: VCMPEQUH. ( vrt vra vrb -- ) 1 70 4 vc-insn ;
+: VCMPEQUW ( vrt vra vrb -- ) 0 134 4 vc-insn ;
+: VCMPEQUW. ( vrt vra vrb -- ) 1 134 4 vc-insn ;
+: VCMPGTSB ( vrt vra vrb -- ) 0 774 4 vc-insn ;
+: VCMPGTSB. ( vrt vra vrb -- ) 1 774 4 vc-insn ;
+: VCMPGTSH ( vrt vra vrb -- ) 0 838 4 vc-insn ;
+: VCMPGTSH. ( vrt vra vrb -- ) 1 838 4 vc-insn ;
+: VCMPGTSW ( vrt vra vrb -- ) 0 902 4 vc-insn ;
+: VCMPGTSW. ( vrt vra vrb -- ) 1 902 4 vc-insn ;
+: VCMPGTUB ( vrt vra vrb -- ) 0 518 4 vc-insn ;
+: VCMPGTUB. ( vrt vra vrb -- ) 1 518 4 vc-insn ;
+: VCMPGTUH ( vrt vra vrb -- ) 0 582 4 vc-insn ;
+: VCMPGTUH. ( vrt vra vrb -- ) 1 582 4 vc-insn ;
+: VCMPGTUW ( vrt vra vrb -- ) 0 646 4 vc-insn ;
+: VCMPGTUW. ( vrt vra vrb -- ) 1 646 4 vc-insn ;
+
+! 6.9.3 Vector Logical Instructions
+: VAND ( vrt vra vrb -- ) 1028 4 vx-insn ;
+: VANDC ( vrt vra vrb -- ) 1092 4 vx-insn ;
+: VNOR ( vrt vra vrb -- ) 1284 4 vx-insn ;
+: VOR ( vrt vra vrb -- ) 1156 4 vx-insn ;
+: VXOR ( vrt vra vrb -- ) 1220 4 vx-insn ;
+
+! 6.9.4 Vector Integer Rotate and Shift Instructions
+: VRLB ( vrt vra vrb -- ) 4 4 vx-insn ;
+: VRLH ( vrt vra vrb -- ) 68 4 vx-insn ;
+: VRLW ( vrt vra vrb -- ) 132 4 vx-insn ;
+: VSLB ( vrt vra vrb -- ) 260 4 vx-insn ;
+: VSLH ( vrt vra vrb -- ) 324 4 vx-insn ;
+: VSLW ( vrt vra vrb -- ) 388 4 vx-insn ;
+: VSRB ( vrt vra vrb -- ) 516 4 vx-insn ;
+: VSRH ( vrt vra vrb -- ) 580 4 vx-insn ;
+: VSRW ( vrt vra vrb -- ) 644 4 vx-insn ;
+: VSRAB ( vrt vra vrb -- ) 772 4 vx-insn ;
+: VSRAH ( vrt vra vrb -- ) 836 4 vx-insn ;
+: VSRAW ( vrt vra vrb -- ) 900 4 vx-insn ;
+
+! 6.10.1 Vector Floating-Point Arithmetic Instructions
+: VADDFP ( vrt vra vrb -- ) 10 4 vx-insn ;
+: VSUBFP ( vrt vra vrb -- ) 74 4 vx-insn ;
+: VMADDFP ( vrt vra vrb -- ) 46 4 vx-insn ;
+: VNMSUBFP ( vrt vra vrb -- ) 47 4 vx-insn ;
+
+! 6.10.2 Vector Floating-Point Maximum and Minimum Instructions
+: VMAXFP ( vrt vra vrb -- ) 1034 4 vx-insn ;
+: VMINFP ( vrt vra vrb -- ) 1098 4 vx-insn ;
+
+! 6.10.3 Vector Floating-Point Rounding and Conversion Instructions
+: VCTSXS ( vrt vrb uim -- ) swap 970 4 vx-insn ;
+: VCTUXS ( vrt vrb uim -- ) swap 906 4 vx-insn ;
+: VCFSX ( vrt vrb uim -- ) swap 842 4 vx-insn ;
+: VCFUX ( vrt vrb uim -- ) swap 778 4 vx-insn ;
+: VRFIM ( vrt vrb -- ) 0 swap 714 4 vx-insn ;
+: VRFIN ( vrt vrb -- ) 0 swap 522 4 vx-insn ;
+: VRFIP ( vrt vrb -- ) 0 swap 650 4 vx-insn ;
+: VRFIX ( vrt vrb -- ) 0 swap 586 4 vx-insn ;
+
+! 6.10.4 Vector Floating-Point Compare Instructions
+: VCMPBFP ( vrt vra vrb -- ) 0 966 4 vc-insn ;
+: VCMPBFP. ( vrt vra vrb -- ) 1 966 4 vc-insn ;
+: VCMPEQFP ( vrt vra vrb -- ) 0 198 4 vc-insn ;
+: VCMPEQFP. ( vrt vra vrb -- ) 1 198 4 vc-insn ;
+: VCMPGEFP ( vrt vra vrb -- ) 0 454 4 vc-insn ;
+: VCMPGEFP. ( vrt vra vrb -- ) 1 454 4 vc-insn ;
+: VCMPGTFP ( vrt vra vrb -- ) 0 710 4 vc-insn ;
+: VCMPGTFP. ( vrt vra vrb -- ) 1 710 4 vc-insn ;
+
+! 6.10.5 Vector Floating-Point Estimate Instructions
+: VEXPTEFP ( vrt vrb -- ) 0 swap 394 4 vx-insn ;
+: VLOGEFP ( vrt vrb -- ) 0 swap 458 4 vx-insn ;
+: VREFP ( vrt vrb -- ) 0 swap 266 4 vx-insn ;
+: VRSQRTEFP ( vrt vrb -- ) 0 swap 330 4 vx-insn ;
+
+! 6.10.6 Vector Status and Control Register Instructions
+: MTVSCR ( vrb -- ) [ 0 0 ] dip 1604 4 vx-insn ;
+: MFVSCR ( vrt -- ) 0 0 1540 4 vx-insn ;
+
+! 7.7 VSX Instruction Descriptions
+: LXSDX ( xt ra rb -- ) 588 31 xx1-insn ;
+: LXVD2X ( xt ra rb -- ) 844 31 xx1-insn ;
+: LXVDSX ( xt ra rb -- ) 332 31 xx1-insn ;
+: LXVW4X ( xt ra rb -- ) 780 31 xx1-insn ;
+: STXSDX ( xs ra rb -- ) 716 31 xx1-insn ;
+: STXVD2X ( xs ra rb -- ) 972 31 xx1-insn ;
+: STXVW4X ( xs ra rb -- ) 908 31 xx1-insn ;
+: XSABSDP ( xt xb -- ) 0 swap 345 60 xx2-insn ;
+: XSADDDP ( xt xa xb -- ) 32 60 xx3-insn ;
+: XSCMPODP ( bf xa xb -- ) [ 2 shift ] 2dip 43 60 xx3-insn ;
+: XSCMPUDP ( bf xa xb -- ) [ 2 shift ] 2dip 35 60 xx3-insn ;
+: XSCPSGNDP ( xt xa xb -- ) 176 60 xx3-insn ;
+: XSCVDPSP ( xt xb -- ) 0 swap 265 60 xx2-insn ;
+: XSCVDPSXDS ( xt xb -- ) 0 swap 344 60 xx2-insn ;
+: XSCVDPSXWS ( xt xb -- ) 0 swap 88 60 xx2-insn ;
+: XSCVDPUXDS ( xt xb -- ) 0 swap 328 60 xx2-insn ;
+: XSCVDPUXWS ( xt xb -- ) 0 swap 72 60 xx2-insn ;
+: XSCVSPDP ( xt xb -- ) 0 swap 329 60 xx2-insn ;
+: XSCVSXDDP ( xt xb -- ) 0 swap 376 60 xx2-insn ;
+: XSCUXDDP ( xt xb -- ) 0 swap 360 60 xx2-insn ;
+: XSDIVDP ( xt xa xb -- ) 56 60 xx3-insn ;
+: XSMADDADP ( xt xa xb -- ) 33 60 xx3-insn ;
+: XSMADDMDP ( xt xa xb -- ) 41 60 xx3-insn ;
+: XSMAXDP ( xt xa xb -- ) 160 60 xx3-insn ;
+: XSMINDP ( xt xa xb -- ) 168 60 xx3-insn ;
+: XSMSUBADP ( xt xa xb -- ) 49 60 xx3-insn ;
+: XSMSUBMDP ( xt xa xb -- ) 57 60 xx3-insn ;
+: XSMULDP ( xt xa xb -- ) 48 60 xx3-insn ;
+: XSNABSDP ( xt xb -- ) 0 swap 361 60 xx2-insn ;
+: XSNEGDP ( xt xb -- ) 0 swap 377 60 xx2-insn ;
+: XSNMADDADP ( xt xa xb -- ) 161 60 xx3-insn ;
+: XSNMADDMDP ( xt xa xb -- ) 169 60 xx3-insn ;
+: XSNMSUBADP ( xt xa xb -- ) 177 60 xx3-insn ;
+: XSNMSUBMDP ( xt xa xb -- ) 185 60 xx3-insn ;
+: XSRDPI ( xt xb -- ) 0 swap 73 60 xx2-insn ;
+: XSRDPIC ( xt xb -- ) 0 swap 107 60 xx2-insn ;
+: XSRDPIM ( xt xb -- ) 0 swap 121 60 xx2-insn ;
+: XSRDPIP ( xt xb -- ) 0 swap 105 60 xx2-insn ;
+: XSRDPIZ ( xt xb -- ) 0 swap 89 60 xx2-insn ;
+: XSREDP ( xt xb -- ) 0 swap 90 60 xx2-insn ;
+: XSRSQRTEDP ( xt xb -- ) 0 swap 74 60 xx2-insn ;
+: XSSQRTDP ( xt xb -- ) 0 swap 75 60 xx2-insn ;
+: XSSUBDP ( xt xa xb -- ) 40 60 xx3-insn ;
+: XSTDIVDP ( bf xa xb -- ) [ 2 shift ] 2dip 61 60 xx3-insn ;
+: XSTSQRTDP ( bf xb -- ) [ 2 shift ] dip 0 swap 106 60 xx2-insn ;
+: XVABSDP ( xt xb -- ) 0 swap 473 60 xx2-insn ;
+: XVABSSP ( xt xb -- ) 0 swap 409 60 xx2-insn ;
+: XVADDDP ( xt xa xb -- ) 96 60 xx3-insn ;
+: XVADDSP ( xt xa xb -- ) 64 60 xx3-insn ;
+: XVCMPEQDP ( xt xa xb -- ) 0 99 60 xx3-rc-insn ;
+: XVCMPEQDP. ( xt xa xb -- ) 1 99 60 xx3-rc-insn ;
+: XVCMPEQSP ( xt xa xb -- ) 0 67 60 xx3-rc-insn ;
+: XVCMPEQSP. ( xt xa xb -- ) 1 67 60 xx3-rc-insn ;
+: XVCMPGEDP ( xt xa xb -- ) 0 115 60 xx3-rc-insn ;
+: XVCMPGEDP. ( xt xa xb -- ) 1 115 60 xx3-rc-insn ;
+: XVCMPGESP ( xt xa xb -- ) 0 83 60 xx3-rc-insn ;
+: XVCMPGESP. ( xt xa xb -- ) 1 83 60 xx3-rc-insn ;
+: XVCMPGTDP ( xt xa xb -- ) 0 107 60 xx3-rc-insn ;
+: XVCMPGTDP. ( xt xa xb -- ) 1 107 60 xx3-rc-insn ;
+: XVCMPGTSP ( xt xa xb -- ) 0 75 60 xx3-rc-insn ;
+: XVCMPGTSP. ( xt xa xb -- ) 1 75 60 xx3-rc-insn ;
+: XVCPSGNDP ( xt xa xb -- ) 240 60 xx3-insn ;
+: XVCPSGNSP ( xt xa xb -- ) 208 60 xx3-insn ;
+: XVCVDPSP ( xt xb -- ) 0 swap 393 60 xx2-insn ;
+: XVCVDPSXDS ( xt xb -- ) 0 swap 472 60 xx2-insn ;
+: XVCVDPSXWS ( xt xb -- ) 0 swap 216 60 xx2-insn ;
+: XVCVDPUXDS ( xt xb -- ) 0 swap 456 60 xx2-insn ;
+: XVCVDPUXWS ( xt xb -- ) 0 swap 200 60 xx2-insn ;
+: XVCVSPDP ( xt xb -- ) 0 swap 457 60 xx2-insn ;
+: XVCVSPSXDS ( xt xb -- ) 0 swap 408 60 xx2-insn ;
+: XVCVSPSXWS ( xt xb -- ) 0 swap 152 60 xx2-insn ;
+: XVCVSPUXDS ( xt xb -- ) 0 swap 392 60 xx2-insn ;
+: XVCVSPUXWS ( xt xb -- ) 0 swap 136 60 xx2-insn ;
+: XVCVSXDDP ( xt xb -- ) 0 swap 504 60 xx2-insn ;
+: XVCVSXDSP ( xt xb -- ) 0 swap 440 60 xx2-insn ;
+: XVCVSXWDP ( xt xb -- ) 0 swap 248 60 xx2-insn ;
+: XVCVSXWSP ( xt xb -- ) 0 swap 184 60 xx2-insn ;
+: XVCVUXDDP ( xt xb -- ) 0 swap 488 60 xx2-insn ;
+: XVCVUXDSP ( xt xb -- ) 0 swap 424 60 xx2-insn ;
+: XVCVUXWDP ( xt xb -- ) 0 swap 232 60 xx2-insn ;
+: XVCVUXWSP ( xt xb -- ) 0 swap 168 60 xx2-insn ;
+: XVDIVDP ( xt xa xb -- ) 120 60 xx3-insn ;
+: XVDIVSP ( xt xa xb -- ) 88 60 xx3-insn ;
+: XVMADDADP ( xt xa xb -- ) 97 60 xx3-insn ;
+: XVMADDMDP ( xt xa xb -- ) 105 60 xx3-insn ;
+: XVMADDASP ( xt xa xb -- ) 65 60 xx3-insn ;
+: XVMADDMSP ( xt xa xb -- ) 73 60 xx3-insn ;
+: XVMAXDP ( xt xa xb -- ) 224 60 xx3-insn ;
+: XVMAXSP ( xt xa xb -- ) 192 60 xx3-insn ;
+: XVMINDP ( xt xa xb -- ) 232 60 xx3-insn ;
+: XVMINSP ( xt xa xb -- ) 200 60 xx3-insn ;
+: XVMSUBADP ( xt xa xb -- ) 113 60 xx3-insn ;
+: XVMSUBMDP ( xt xa xb -- ) 121 60 xx3-insn ;
+: XVMSUBASP ( xt xa xb -- ) 81 60 xx3-insn ;
+: XVMSUBMSP ( xt xa xb -- ) 89 60 xx3-insn ;
+: XVMULDP ( xt xa xb -- ) 112 60 xx3-insn ;
+: XVMULSP ( xt xa xb -- ) 80 60 xx3-insn ;
+: XVNABSDP ( xt xb -- ) 0 swap 489 60 xx2-insn ;
+: XVNABSSP ( xt xb -- ) 0 swap 425 60 xx2-insn ;
+: XVNEGDP ( xt xb -- ) 0 swap 505 60 xx2-insn ;
+: XVNEGSP ( xt xb -- ) 0 swap 441 60 xx2-insn ;
+: XVNMADDADP ( xt xa xb -- ) 225 60 xx3-insn ;
+: XVNMADDMDP ( xt xa xb -- ) 233 60 xx3-insn ;
+: XVNMADDASP ( xt xa xb -- ) 193 60 xx3-insn ;
+: XVNMADDMSP ( xt xa xb -- ) 201 60 xx3-insn ;
+: XVNMSUBADP ( xt xa xb -- ) 241 60 xx3-insn ;
+: XVNMSUBMDP ( xt xa xb -- ) 249 60 xx3-insn ;
+: XVNMSUBASP ( xt xa xb -- ) 209 60 xx3-insn ;
+: XVNMSUBMSP ( xt xa xb -- ) 217 60 xx3-insn ;
+: XVRDPI ( xt xb -- ) 0 swap 201 60 xx2-insn ;
+: XVRDPIC ( xt xb -- ) 0 swap 235 60 xx2-insn ;
+: XVRDPIM ( xt xb -- ) 0 swap 249 60 xx2-insn ;
+: XVRDPIP ( xt xb -- ) 0 swap 233 60 xx2-insn ;
+: XVRDPIZ ( xt xb -- ) 0 swap 217 60 xx2-insn ;
+: XVREDP ( xt xb -- ) 0 swap 218 60 xx2-insn ;
+: XVRESP ( xt xb -- ) 0 swap 154 60 xx2-insn ;
+: XVRSPI ( xt xb -- ) 0 swap 137 60 xx2-insn ;
+: XVRSPIC ( xt xb -- ) 0 swap 171 60 xx2-insn ;
+: XVRSPIM ( xt xb -- ) 0 swap 185 60 xx2-insn ;
+: XVRSPIP ( xt xb -- ) 0 swap 169 60 xx2-insn ;
+: XVRSPIZ ( xt xb -- ) 0 swap 153 60 xx2-insn ;
+: XVRSQRTEDP ( xt xb -- ) 0 swap 202 60 xx2-insn ;
+: XVRSQRTESP ( xt xb -- ) 0 swap 138 60 xx2-insn ;
+: XVSQRTDP ( xt xb -- ) 0 swap 203 60 xx2-insn ;
+: XVSQRTSP ( xt xb -- ) 0 swap 139 60 xx2-insn ;
+: XVSUBDP ( xt xb -- ) 0 swap 104 60 xx2-insn ;
+: XVSUBSP ( xt xb -- ) 0 swap 72 60 xx2-insn ;
+: XVTDIVDP ( bf xa xb -- ) [ 2 shift ] 2dip 125 60 xx3-insn ;
+: XVTDIVSP ( bf xa xb -- ) [ 2 shift ] 2dip 93 60 xx3-insn ;
+: XVTSQRTDP ( bf xa xb -- ) [ 2 shift ] 2dip 234 60 xx3-insn ;
+: XVTSQRTSP ( bf xa xb -- ) [ 2 shift ] 2dip 170 60 xx3-insn ;
+: XXLAND ( xt xa xb -- ) 130 60 xx3-insn ;
+: XXLANDC ( xt xa xb -- ) 138 60 xx3-insn ;
+: XXLNOR ( xt xa xb -- ) 162 60 xx3-insn ;
+: XXLOR ( xt xa xb -- ) 146 60 xx3-insn ;
+: XXLXOR ( xt xa xb -- ) 154 60 xx3-insn ;
+: XXMRGHW ( xt xa xb -- ) 18 60 xx3-insn ;
+: XXMRGLW ( xt xa xb -- ) 50 60 xx3-insn ;
+: XXPERMDI ( xt xa xb dm -- ) 0 swap 10 60 xx3-rc-dm-insn ;
+: XXSEL ( xt xa xb xc -- ) 3 60 xx4-insn ;
+: XXSLDWI ( xt xa xb sh -- ) 0 swap 2 60 xx3-rc-dm-insn ;
+: XVSPLTW ( xt xb uim -- ) swap 164 60 xx2-insn ;
+
+! 8.3.9 SPE Instruction Set
+: BRINC ( rt ra rb -- ) 527 4 evx-insn ;
+: EVABS ( rt ra -- ) 0 520 4 evx-insn ;
+: EVADDIW ( rt rb ui -- ) swap 514 4 evx-insn ;
+: EVADDSMIAAW ( rt ra -- ) 0 1225 4 evx-insn ;
+: EVADDSSIAAW ( rt ra -- ) 0 1217 4 evx-insn ;
+: EVADDUMIAAW ( rt ra -- ) 0 1224 4 evx-insn ;
+: EVADDUSIAWW ( rt ra -- ) 0 1216 4 evx-insn ;
+: EVADDW ( rt ra rb -- ) 512 4 evx-insn ;
+: EVAND ( rt ra rb -- ) 529 4 evx-insn ;
+: EVANDC ( rt ra rb -- ) 530 4 evx-insn ;
+: EVCMPEQ ( bf ra rb -- ) [ 2 shift ] 2dip 564 4 evx-insn ;
+: EVCMPGTS ( bf ra rb -- ) [ 2 shift ] 2dip 561 4 evx-insn ;
+: EVCMPGTU ( bf ra rb -- ) [ 2 shift ] 2dip 560 4 evx-insn ;
+: EVCMPLTS ( bf ra rb -- ) [ 2 shift ] 2dip 563 4 evx-insn ;
+: EVCMPLTU ( bf ra rb -- ) [ 2 shift ] 2dip 562 4 evx-insn ;
+: EVCNTLSW ( rt ra -- ) 0 526 4 evx-insn ;
+: EVCNTLZW ( rt ra -- ) 0 525 4 evx-insn ;
+: EVDIVWS ( rt ra rb -- ) 1222 4 evx-insn ;
+: EVDIVWU ( rt ra rb -- ) 1223 4 evx-insn ;
+: EVEQV ( rt ra rb -- ) 537 4 evx-insn ;
+: EVEXTSB ( rt ra -- ) 0 522 4 evx-insn ;
+: EVEXTSH ( rt ra -- ) 0 523 4 evx-insn ;
+: EVLDD ( rt ra d -- ) 769 4 evx-insn ;
+: EVLDDX ( rt ra rb -- ) 768 4 evx-insn ;
+: EVLDH ( rt ra d -- ) 773 4 evx-insn ;
+: EVLDHX ( rt ra rb -- ) 772 4 evx-insn ;
+: EVLDW ( rt ra d -- ) 771 4 evx-insn ;
+: EVLDWX ( rt ra rb -- ) 770 4 evx-insn ;
+: EVLHHESPLAT ( rt ra d -- ) 777 4 evx-insn ;
+: EVLHHESPLATX ( rt ra rb -- ) 776 4 evx-insn ;
+: EVLHHOSSPLAT ( rt ra d -- ) 783 4 evx-insn ;
+: EVLHHOSSPLATX ( rt ra rb -- ) 782 4 evx-insn ;
+: EVLHHOUSPLAT ( rt ra d -- ) 781 4 evx-insn ;
+: EVLHHOUSPLATX ( rt ra rb -- ) 780 4 evx-insn ;
+: EVLWHE ( rt ra d -- ) 785 4 evx-insn ;
+: EVLWHEX ( rt ra rb -- ) 784 4 evx-insn ;
+: EVLWHOS ( rt ra d -- ) 791 4 evx-insn ;
+: EVLWHOSX ( rt ra rb -- ) 790 4 evx-insn ;
+: EVLWHOU ( rt ra d -- ) 789 4 evx-insn ;
+: EVLWHOUX ( rt ra rb -- ) 788 4 evx-insn ;
+: EVLWHSPLAT ( rt ra d -- ) 797 4 evx-insn ;
+: EVLWHSPLATX ( rt ra rb -- ) 796 4 evx-insn ;
+: EVLWWSPLAT ( rt ra d -- ) 793 4 evx-insn ;
+: EVLWWSPLATX ( rt ra d -- ) 792 4 evx-insn ;
+: EVMERGEHI ( rt ra rb -- ) 556 4 evx-insn ;
+: EVMERGELO ( rt ra rb -- ) 557 4 evx-insn ;
+: EVMERGEHILO ( rt ra rb -- ) 558 4 evx-insn ;
+: EVMERGELOHI ( rt ra rb -- ) 559 4 evx-insn ;
+: EVMHEGSMFAA ( rt ra rb -- ) 1323 4 evx-insn ;
+: EVMHEGSMFAN ( rt ra rb -- ) 1451 4 evx-insn ;
+: EVMHEGSMIAA ( rt ra rb -- ) 1321 4 evx-insn ;
+: EVMHEGSMIAN ( rt ra rb -- ) 1449 4 evx-insn ;
+: EVMHEGUMIAA ( rt ra rb -- ) 1320 4 evx-insn ;
+: EVMHEGUMIAN ( rt ra rb -- ) 1448 4 evx-insn ;
+: EVMHESMF ( rt ra rb -- ) 1035 4 evx-insn ;
+: EVMHESMFA ( rt ra rb -- ) 1067 4 evx-insn ;
+: EVMHESMFAAW ( rt ra rb -- ) 1291 4 evx-insn ;
+: EVMHESMFANW ( rt ra rb -- ) 1419 4 evx-insn ;
+: EVMHESMI ( rt ra rb -- ) 1033 4 evx-insn ;
+: EVMHESMIA ( rt ra rb -- ) 1065 4 evx-insn ;
+: EVMHESMIAAW ( rt ra rb -- ) 1289 4 evx-insn ;
+: EVMHESMIANW ( rt ra rb -- ) 1417 4 evx-insn ;
+: EVMHESSF ( rt ra rb -- ) 1027 4 evx-insn ;
+: EVMHESSFA ( rt ra rb -- ) 1059 4 evx-insn ;
+: EVMHESSFAAW ( rt ra rb -- ) 1283 4 evx-insn ;
+: EVMHESSFANW ( rt ra rb -- ) 1411 4 evx-insn ;
+: EVMHESSIAAW ( rt ra rb -- ) 1281 4 evx-insn ;
+: EVMHESSIANW ( rt ra rb -- ) 1409 4 evx-insn ;
+: EVMHEUMI ( rt ra rb -- ) 1032 4 evx-insn ;
+: EVMHEUMIA ( rt ra rb -- ) 1064 4 evx-insn ;
+: EVMHEUMIAAW ( rt ra rb -- ) 1288 4 evx-insn ;
+: EVMHEUMIANW ( rt ra rb -- ) 1416 4 evx-insn ;
+: EVMHEUSIAAW ( rt ra rb -- ) 1280 4 evx-insn ;
+: EVMHEUSIANW ( rt ra rb -- ) 1408 4 evx-insn ;
+: EVMHOGSMFAA ( rt ra rb -- ) 1327 4 evx-insn ;
+: EVMHOGSMFAN ( rt ra rb -- ) 1455 4 evx-insn ;
+: EVMHOGSMIAA ( rt ra rb -- ) 1325 4 evx-insn ;
+: EVMHOGSMIAN ( rt ra rb -- ) 1453 4 evx-insn ;
+: EVMHOGUMIAA ( rt ra rb -- ) 1324 4 evx-insn ;
+: EVMHOGUMIAN ( rt ra rb -- ) 1452 4 evx-insn ;
+: EVMHOSMF ( rt ra rb -- ) 1039 4 evx-insn ;
+: EVMHOSMFA ( rt ra rb -- ) 1071 4 evx-insn ;
+: EVMHOSMFAAW ( rt ra rb -- ) 1295 4 evx-insn ;
+: EVMHOSMFANW ( rt ra rb -- ) 1423 4 evx-insn ;
+: EVMHOSMI ( rt ra rb -- ) 1037 4 evx-insn ;
+: EVMHOSMIA ( rt ra rb -- ) 1069 4 evx-insn ;
+: EVMHOSMIAAW ( rt ra rb -- ) 1293 4 evx-insn ;
+: EVMHOSMIANW ( rt ra rb -- ) 1421 4 evx-insn ;
+: EVMHOSSF ( rt ra rb -- ) 1031 4 evx-insn ;
+: EVMHOSSFA ( rt ra rb -- ) 1063 4 evx-insn ;
+: EVMHOSSFAAW ( rt ra rb -- ) 1287 4 evx-insn ;
+: EVMHOSSFANW ( rt ra rb -- ) 1415 4 evx-insn ;
+: EVMHOSSIAAW ( rt ra rb -- ) 1285 4 evx-insn ;
+: EVMHOSSIANW ( rt ra rb -- ) 1413 4 evx-insn ;
+: EVMHOUMI ( rt ra rb -- ) 1036 4 evx-insn ;
+: EVMHOUMIA ( rt ra rb -- ) 1068 4 evx-insn ;
+: EVMHOUMIAAW ( rt ra rb -- ) 1292 4 evx-insn ;
+: EVMHOUMIANW ( rt ra rb -- ) 1420 4 evx-insn ;
+: EVMHOUSIAAW ( rt ra rb -- ) 1284 4 evx-insn ;
+: EVMHOUSIANW ( rt ra rb -- ) 1412 4 evx-insn ;
+: EVMRA ( rt ra rb -- ) 1220 4 evx-insn ;
+: EVMWHSMF ( rt ra rb -- ) 1103 4 evx-insn ;
+: EVMWHSMFA ( rt ra rb -- ) 1135 4 evx-insn ;
+: EVMWHSMI ( rt ra rb -- ) 1101 4 evx-insn ;
+: EVMWHSMIA ( rt ra rb -- ) 1133 4 evx-insn ;
+: EVMWHSSF ( rt ra rb -- ) 1095 4 evx-insn ;
+: EVMWHSSFA ( rt ra rb -- ) 1127 4 evx-insn ;
+: EVMWHUMI ( rt ra rb -- ) 1100 4 evx-insn ;
+: EVMWHUMIA ( rt ra rb -- ) 1132 4 evx-insn ;
+: EVMWLSMIAAW ( rt ra rb -- ) 1353 4 evx-insn ;
+: EVMWLSMIANW ( rt ra rb -- ) 1481 4 evx-insn ;
+: EVMWLSSIAAW ( rt ra rb -- ) 1345 4 evx-insn ;
+: EVMWLSSIANW ( rt ra rb -- ) 1473 4 evx-insn ;
+: EVMWLUMI ( rt ra rb -- ) 1096 4 evx-insn ;
+: EVMWLUMIA ( rt ra rb -- ) 1128 4 evx-insn ;
+: EVMWLUMIAAW ( rt ra rb -- ) 1352 4 evx-insn ;
+: EVMWLUMIANW ( rt ra rb -- ) 1480 4 evx-insn ;
+: EVMWLUSIAAW ( rt ra rb -- ) 1344 4 evx-insn ;
+: EVMWLUSIANW ( rt ra rb -- ) 1472 4 evx-insn ;
+: EVMWSMF ( rt ra rb -- ) 1115 4 evx-insn ;
+: EVMWSMFA ( rt ra rb -- ) 1147 4 evx-insn ;
+: EVMWSMFAA ( rt ra rb -- ) 1371 4 evx-insn ;
+: EVMWSMFAN ( rt ra rb -- ) 1499 4 evx-insn ;
+: EVMWSMI ( rt ra rb -- ) 1113 4 evx-insn ;
+: EVMWSMIA ( rt ra rb -- ) 1145 4 evx-insn ;
+: EVMWSMIAA ( rt ra rb -- ) 1369 4 evx-insn ;
+: EVMWSMIAN ( rt ra rb -- ) 1497 4 evx-insn ;
+: EVMWSSF ( rt ra rb -- ) 1107 4 evx-insn ;
+: EVMWSSFA ( rt ra rb -- ) 1139 4 evx-insn ;
+: EVMWSSFAA ( rt ra rb -- ) 1363 4 evx-insn ;
+: EVMWSSFAN ( rt ra rb -- ) 1491 4 evx-insn ;
+: EVMWUMI ( rt ra rb -- ) 1112 4 evx-insn ;
+: EVMWUMIA ( rt ra rb -- ) 1144 4 evx-insn ;
+: EVMWUMIAA ( rt ra rb -- ) 1368 4 evx-insn ;
+: EVMWUMIAN ( rt ra rb -- ) 1496 4 evx-insn ;
+: EVNAND ( rt ra rb -- ) 542 4 evx-insn ;
+: EVNEG ( rt ra rb -- ) 521 4 evx-insn ;
+: EVNOR ( rt ra rb -- ) 536 4 evx-insn ;
+: EVOR ( rt ra rb -- ) 535 4 evx-insn ;
+: EVORC ( rt ra rb -- ) 539 4 evx-insn ;
+: EVRLW ( rt ra rb -- ) 552 4 evx-insn ;
+: EVRLWI ( rt ra rb -- ) 554 4 evx-insn ;
+: EVRNDW ( rt ra rb -- ) 524 4 evx-insn ;
+: EVSEL ( rt ra rb -- ) 79 4 evx-insn ;
+: EVSLW ( rt ra rb -- ) 548 4 evx-insn ;
+: EVSLWI ( rt ra rb -- ) 550 4 evx-insn ;
+: EVSPLATFI ( rt ra rb -- ) 555 4 evx-insn ;
+: EVSPLATI ( rt ra rb -- ) 553 4 evx-insn ;
+: EVSRWIS ( rt ra rb -- ) 547 4 evx-insn ;
+: EVSRWIU ( rt ra rb -- ) 546 4 evx-insn ;
+: EVSRWS ( rt ra rb -- ) 545 4 evx-insn ;
+: EVSRWU ( rt ra rb -- ) 544 4 evx-insn ;
+: EVSTDD ( rt ra d -- ) 801 4 evx-insn ;
+: EVSTDDX ( rt ra rb -- ) 800 4 evx-insn ;
+: EVSTDH ( rt ra d -- ) 805 4 evx-insn ;
+: EVSTDHX ( rt ra rb -- ) 804 4 evx-insn ;
+: EVSTDW ( rt ra d -- ) 803 4 evx-insn ;
+: EVSTDWX ( rt ra rb -- ) 802 4 evx-insn ;
+: EVSTWHE ( rt ra d -- ) 817 4 evx-insn ;
+: EVSTWHEX ( rt ra rb -- ) 816 4 evx-insn ;
+: EVSTWHO ( rt ra d -- ) 821 4 evx-insn ;
+: EVSTWHOX ( rt ra rb -- ) 820 4 evx-insn ;
+: EVSTWWE ( rt ra d -- ) 825 4 evx-insn ;
+: EVSTWWEX ( rt ra rb -- ) 824 4 evx-insn ;
+: EVSTWWO ( rt ra d -- ) 829 4 evx-insn ;
+: EVSTWWOX ( rt ra rb -- ) 828 4 evx-insn ;
+: EVSUBFSMIAAW ( rt ra -- ) 0 1227 4 evx-insn ;
+: EVSUBFSSIAAW ( rt ra -- ) 0 1219 4 evx-insn ;
+: EVSUBFUMIAAW ( rt ra -- ) 0 1226 4 evx-insn ;
+: EVSUBFUSIAAW ( rt ra -- ) 0 1218 4 evx-insn ;
+: EVSUBFW ( rt ra rb -- ) 516 4 evx-insn ;
+: EVSUBIFW ( rt ui rb -- ) 518 4 evx-insn ;
+: EVXOR ( rt ra rb -- ) 534 4 evx-insn ;
+
+! 9.3.2 SPE Embedded Float Vector Insturctions
+: EVFSABS ( rt ra -- ) 0 644 4 evx-insn ;
+: EVFSNABS ( rt ra -- ) 0 645 4 evx-insn ;
+: EVFSNEG ( rt ra -- ) 0 646 4 evx-insn ;
+: EVFSADD ( rt ra rb -- ) 640 4 evx-insn ;
+: EVFSSUB ( rt ra rb -- ) 641 4 evx-insn ;
+: EVFSMUL ( rt ra rb -- ) 648 4 evx-insn ;
+: EVFSDIV ( rt ra rb -- ) 649 4 evx-insn ;
+: EVFSCMPGT ( bf ra rb -- ) [ 2 shift ] 2dip 652 4 evx-insn ;
+: EVFSCMPLT ( bf ra rb -- ) [ 2 shift ] 2dip 653 4 evx-insn ;
+: EVFSCMPEQ ( bf ra rb -- ) [ 2 shift ] 2dip 654 4 evx-insn ;
+: EVFSTSTGT ( bf ra rb -- ) [ 2 shift ] 2dip 668 4 evx-insn ;
+: EVFSTSTLT ( bf ra rb -- ) [ 2 shift ] 2dip 669 4 evx-insn ;
+: EVFSTSTEQ ( bf ra rb -- ) [ 2 shift ] 2dip 670 4 evx-insn ;
+: EVFSCFSI ( rt rb -- ) 0 swap 657 4 evx-insn ;
+: EVFSCFUI ( rt rb -- ) 0 swap 656 4 evx-insn ;
+: EVFSCFSF ( rt rb -- ) 0 swap 659 4 evx-insn ;
+: EVFSCFUF ( rt rb -- ) 0 swap 658 4 evx-insn ;
+: EVFSCTSI ( rt rb -- ) 0 swap 661 4 evx-insn ;
+: EVFSCTSIZ ( rt rb -- ) 0 swap 666 4 evx-insn ;
+: EVFSCTUI ( rt rb -- ) 0 swap 660 4 evx-insn ;
+: EVFSCTUIZ ( rt rb -- ) 0 swap 664 4 evx-insn ;
+: EVFSCTSF ( rt rb -- ) 0 swap 663 4 evx-insn ;
+: EVFSCTUF ( rt rb -- ) 0 swap 662 4 evx-insn ;
+
+! 9.3.3 SPE Embedded Float Scalar Single Instructions
+: EFSABS ( rt ra -- ) 0 708 4 evx-insn ;
+: EFSNABS ( rt ra -- ) 0 709 4 evx-insn ;
+: EFSNEG ( rt ra -- ) 0 710 4 evx-insn ;
+: EFSADD ( rt ra rb -- ) 704 4 evx-insn ;
+: EFSSUB ( rt ra rb -- ) 705 4 evx-insn ;
+: EFSMUL ( rt ra rb -- ) 712 4 evx-insn ;
+: EFSDIV ( rt ra rb -- ) 713 4 evx-insn ;
+: EFSCMPGT ( bf ra rb -- ) [ 2 shift ] 2dip 716 4 evx-insn ;
+: EFSCMPLT ( bf ra rb -- ) [ 2 shift ] 2dip 717 4 evx-insn ;
+: EFSCMPEQ ( bf ra rb -- ) [ 2 shift ] 2dip 718 4 evx-insn ;
+: EFSTSTGT ( bf ra rb -- ) [ 2 shift ] 2dip 732 4 evx-insn ;
+: EFSTSTLT ( bf ra rb -- ) [ 2 shift ] 2dip 733 4 evx-insn ;
+: EFSTSTEQ ( bf ra rb -- ) [ 2 shift ] 2dip 734 4 evx-insn ;
+: EFSCFSI ( rt rb -- ) 0 swap 721 4 evx-insn ;
+: EFSCFUI ( rt rb -- ) 0 swap 720 4 evx-insn ;
+: EFSCFSF ( rt rb -- ) 0 swap 723 4 evx-insn ;
+: EFSCFUF ( rt rb -- ) 0 swap 722 4 evx-insn ;
+: EFSCTSI ( rt rb -- ) 0 swap 725 4 evx-insn ;
+: EFSCTUI ( rt rb -- ) 0 swap 724 4 evx-insn ;
+: EFSCTSIZ ( rt rb -- ) 0 swap 730 4 evx-insn ;
+: EFSCTUIZ ( rt rb -- ) 0 swap 728 4 evx-insn ;
+: EFSCTSF ( rt rb -- ) 0 swap 727 4 evx-insn ;
+: EFSCTUF ( rt rb -- ) 0 swap 726 4 evx-insn ;
+
+! 9.3.4 SPE Embedded Float Scalar Double Instructions
+: EFDABS ( rt ra -- ) 0 740 4 evx-insn ;
+: EFDNABS ( rt ra -- ) 0 741 4 evx-insn ;
+: EFDNEG ( rt ra -- ) 0 742 4 evx-insn ;
+: EFDADD ( rt ra rb -- ) 736 4 evx-insn ;
+: EFDSUB ( rt ra rb -- ) 737 4 evx-insn ;
+: EFDMUL ( rt ra rb -- ) 744 4 evx-insn ;
+: EFDDIV ( rt ra rb -- ) 745 4 evx-insn ;
+: EFDCMPGT ( bf ra rb -- ) [ 2 shift ] 2dip 748 4 evx-insn ;
+: EFDCMPLT ( bf ra rb -- ) [ 2 shift ] 2dip 749 4 evx-insn ;
+: EFDCMPEQ ( bf ra rb -- ) [ 2 shift ] 2dip 750 4 evx-insn ;
+: EFDTSTGT ( bf ra rb -- ) [ 2 shift ] 2dip 764 4 evx-insn ;
+: EFDTSTLT ( bf ra rb -- ) [ 2 shift ] 2dip 765 4 evx-insn ;
+: EFDTSTEQ ( bf ra rb -- ) [ 2 shift ] 2dip 766 4 evx-insn ;
+: EFDCFSI ( rt rb -- ) 0 swap 753 4 evx-insn ;
+: EFDCFUI ( rt rb -- ) 0 swap 752 4 evx-insn ;
+: EFDCFSID ( rt rb -- ) 0 swap 739 4 evx-insn ;
+: EFDCFUID ( rt rb -- ) 0 swap 738 4 evx-insn ;
+: EFDCFSF ( rt rb -- ) 0 swap 755 4 evx-insn ;
+: EFDCTSI ( rt rb -- ) 0 swap 757 4 evx-insn ;
+: EFDCFUF ( rt rb -- ) 0 swap 754 4 evx-insn ;
+: EFDCTUI ( rt rb -- ) 0 swap 756 4 evx-insn ;
+: EFDCTSIDZ ( rt rb -- ) 0 swap 747 4 evx-insn ;
+: EFDCTUIDZ ( rt rb -- ) 0 swap 746 4 evx-insn ;
+: EFDCTSIZ ( rt rb -- ) 0 swap 762 4 evx-insn ;
+: EFDCTUIZ ( rt rb -- ) 0 swap 760 4 evx-insn ;
+: EFDCTSF ( rt rb -- ) 0 swap 759 4 evx-insn ;
+: EFDCTUF ( rt rb -- ) 0 swap 758 4 evx-insn ;
+: EFDCFS ( rt rb -- ) 0 swap 751 4 evx-insn ;
+: EFSCFD ( rt rb -- ) 0 swap 719 4 evx-insn ;
+
+! 10.0 Legacy Move Assist Instruction
+: DLMZB ( ra rs rb -- ) swapd 0 78 31 x-insn ; deprecated
+: DLMZB. ( ra rs rb -- ) swapd 1 78 31 x-insn ; deprecated
+
+! 11.0 Legacy Integer Multiply-Accumulate Instructions
+: MACCHW ( rt ra rb -- ) 0 172 0 4 xo-insn ; deprecated
+: MACCHW. ( rt ra rb -- ) 0 172 1 4 xo-insn ; deprecated
+: MACCHWO ( rt ra rb -- ) 1 172 0 4 xo-insn ; deprecated
+: MACCHWO. ( rt ra rb -- ) 1 172 1 4 xo-insn ; deprecated
+: MACCHWS ( rt ra rb -- ) 0 236 0 4 xo-insn ; deprecated
+: MACCHWS. ( rt ra rb -- ) 0 236 1 4 xo-insn ; deprecated
+: MACCHWSO ( rt ra rb -- ) 1 236 0 4 xo-insn ; deprecated
+: MACCHWSO. ( rt ra rb -- ) 1 236 1 4 xo-insn ; deprecated
+: MACCHWU ( rt ra rb -- ) 0 140 0 4 xo-insn ; deprecated
+: MACCHWU. ( rt ra rb -- ) 0 140 1 4 xo-insn ; deprecated
+: MACCHWUO ( rt ra rb -- ) 1 140 0 4 xo-insn ; deprecated
+: MACCHWUO. ( rt ra rb -- ) 1 140 1 4 xo-insn ; deprecated
+: MACCHWSU ( rt ra rb -- ) 0 204 0 4 xo-insn ; deprecated
+: MACCHWSU. ( rt ra rb -- ) 0 204 1 4 xo-insn ; deprecated
+: MACCHWSUO ( rt ra rb -- ) 1 204 0 4 xo-insn ; deprecated
+: MACCHWSUO. ( rt ra rb -- ) 1 204 1 4 xo-insn ; deprecated
+: MACHHW ( rt ra rb -- ) 0 44 0 4 xo-insn ; deprecated
+: MACHHW. ( rt ra rb -- ) 0 44 1 4 xo-insn ; deprecated
+: MACHHWO ( rt ra rb -- ) 1 44 0 4 xo-insn ; deprecated
+: MACHHWO. ( rt ra rb -- ) 1 44 1 4 xo-insn ; deprecated
+: MACHHWS ( rt ra rb -- ) 0 108 0 4 xo-insn ; deprecated
+: MACHHWS. ( rt ra rb -- ) 0 108 1 4 xo-insn ; deprecated
+: MACHHWSO ( rt ra rb -- ) 1 108 0 4 xo-insn ; deprecated
+: MACHHWSO. ( rt ra rb -- ) 1 108 1 4 xo-insn ; deprecated
+: MACHHWU ( rt ra rb -- ) 0 12 0 4 xo-insn ; deprecated
+: MACHHWU. ( rt ra rb -- ) 0 12 1 4 xo-insn ; deprecated
+: MACHHWUO ( rt ra rb -- ) 1 12 0 4 xo-insn ; deprecated
+: MACHHWUO. ( rt ra rb -- ) 1 12 1 4 xo-insn ; deprecated
+: MACHHWSU ( rt ra rb -- ) 0 76 0 4 xo-insn ; deprecated
+: MACHHWSU. ( rt ra rb -- ) 0 76 1 4 xo-insn ; deprecated
+: MACHHWSUO ( rt ra rb -- ) 1 76 0 4 xo-insn ; deprecated
+: MACHHWSUO. ( rt ra rb -- ) 1 76 1 4 xo-insn ; deprecated
+: MACLHW ( rt ra rb -- ) 0 428 0 4 xo-insn ; deprecated
+: MACLHW. ( rt ra rb -- ) 0 428 1 4 xo-insn ; deprecated
+: MACLHWO ( rt ra rb -- ) 1 428 0 4 xo-insn ; deprecated
+: MACLHWO. ( rt ra rb -- ) 1 428 1 4 xo-insn ; deprecated
+: MACLHWS ( rt ra rb -- ) 0 492 0 4 xo-insn ; deprecated
+: MACLHWS. ( rt ra rb -- ) 0 492 1 4 xo-insn ; deprecated
+: MACLHWSO ( rt ra rb -- ) 1 492 0 4 xo-insn ; deprecated
+: MACLHWSO. ( rt ra rb -- ) 1 492 1 4 xo-insn ; deprecated
+: MACLHWU ( rt ra rb -- ) 0 396 0 4 xo-insn ; deprecated
+: MACLHWU. ( rt ra rb -- ) 0 396 1 4 xo-insn ; deprecated
+: MACLHWUO ( rt ra rb -- ) 1 396 0 4 xo-insn ; deprecated
+: MACLHWUO. ( rt ra rb -- ) 1 396 1 4 xo-insn ; deprecated
+: MACLHWSU ( rt ra rb -- ) 0 460 0 4 xo-insn ; deprecated
+: MACLHWSU. ( rt ra rb -- ) 0 460 1 4 xo-insn ; deprecated
+: MACLHWSUO ( rt ra rb -- ) 1 460 0 4 xo-insn ; deprecated
+: MACLHWSUO. ( rt ra rb -- ) 1 460 1 4 xo-insn ; deprecated
+: MULCHW ( rt ra rb -- ) 168 0 4 x-insn ; deprecated
+: MULCHW. ( rt ra rb -- ) 168 1 4 x-insn ; deprecated
+: MULCHWU ( rt ra rb -- ) 136 0 4 x-insn ; deprecated
+: MULCHWU. ( rt ra rb -- ) 136 1 4 x-insn ; deprecated
+: MULHHW ( rt ra rb -- ) 40 0 4 x-insn ; deprecated
+: MULHHW. ( rt ra rb -- ) 40 1 4 x-insn ; deprecated
+: MULHHWU ( rt ra rb -- ) 8 0 4 x-insn ; deprecated
+: MULHHWU. ( rt ra rb -- ) 8 1 4 x-insn ; deprecated
+: MULLHW ( rt ra rb -- ) 424 0 4 x-insn ; deprecated
+: MULLHW. ( rt ra rb -- ) 424 1 4 x-insn ; deprecated
+: MULLHWU ( rt ra rb -- ) 392 0 4 x-insn ; deprecated
+: MULLHWU. ( rt ra rb -- ) 392 1 4 x-insn ; deprecated
+: NMACCHW ( rt ra rb -- ) 0 174 0 4 xo-insn ; deprecated
+: NMACCHW. ( rt ra rb -- ) 0 174 1 4 xo-insn ; deprecated
+: NMACCHWO ( rt ra rb -- ) 1 174 0 4 xo-insn ; deprecated
+: NMACCHWO. ( rt ra rb -- ) 1 174 1 4 xo-insn ; deprecated
+: NMACCHWS ( rt ra rb -- ) 0 238 0 4 xo-insn ; deprecated
+: NMACCHWS. ( rt ra rb -- ) 0 238 1 4 xo-insn ; deprecated
+: NMACCHWSO ( rt ra rb -- ) 1 238 0 4 xo-insn ; deprecated
+: NMACCHWSO. ( rt ra rb -- ) 1 238 1 4 xo-insn ; deprecated
+: NMACHHW ( rt ra rb -- ) 0 46 0 4 xo-insn ; deprecated
+: NMACHHW. ( rt ra rb -- ) 0 46 1 4 xo-insn ; deprecated
+: NMACHHWO ( rt ra rb -- ) 1 46 0 4 xo-insn ; deprecated
+: NMACHHWO. ( rt ra rb -- ) 1 46 1 4 xo-insn ; deprecated
+: NMACHHWS ( rt ra rb -- ) 0 110 0 4 xo-insn ; deprecated
+: NMACHHWS. ( rt ra rb -- ) 0 110 1 4 xo-insn ; deprecated
+: NMACHHWSO ( rt ra rb -- ) 1 110 0 4 xo-insn ; deprecated
+: NMACHHWSO. ( rt ra rb -- ) 1 110 1 4 xo-insn ; deprecated
+: NMACHLW ( rt ra rb -- ) 0 430 0 4 xo-insn ; deprecated
+: NMACHLW. ( rt ra rb -- ) 0 430 1 4 xo-insn ; deprecated
+: NMACHLWO ( rt ra rb -- ) 1 430 0 4 xo-insn ; deprecated
+: NMACHLWO. ( rt ra rb -- ) 1 430 1 4 xo-insn ; deprecated
+: NMACHLWS ( rt ra rb -- ) 0 494 0 4 xo-insn ; deprecated
+: NMACHLWS. ( rt ra rb -- ) 0 494 1 4 xo-insn ; deprecated
+: NMACHLWSO ( rt ra rb -- ) 1 494 0 4 xo-insn ; deprecated
+: NMACHLWSO. ( rt ra rb -- ) 1 494 1 4 xo-insn ; deprecated
+
+! E.2.2 Simple Branch Mnemonics
+: BLR ( -- ) 0x14 0 0 BCLR ;
+: BCTR ( -- ) 0x14 0 0 BCCTR ;
+: BLRL ( -- ) 0x14 0 0 BCLRL ;
+: BCTRL ( -- ) 0x14 0 0 BCCTRL ;
+: BT ( bi target_addr -- ) [ 0xC ] 2dip BC ;
+: BTA ( bi target_addr -- ) [ 0xC ] 2dip BCA ;
+: BTLR ( bi target_addr -- ) [ 0xC ] 2dip BCLR ;
+: BTCTR ( bi target_addr -- ) [ 0xC ] 2dip BCCTR ;
+: BTL ( bi target_addr -- ) [ 0xC ] 2dip BCL ;
+: BTLA ( bi target_addr -- ) [ 0xC ] 2dip BCLA ;
+: BTLRL ( bi target_addr -- ) [ 0xC ] 2dip BCLRL ;
+: BTCTRL ( bi target_addr -- ) [ 0xC ] 2dip BCCTRL ;
+: BF ( bi target_addr -- ) [ 0x4 ] 2dip BC ;
+: BFA ( bi target_addr -- ) [ 0x4 ] 2dip BCA ;
+: BFLR ( bi target_addr -- ) [ 0x4 ] 2dip BCLR ;
+: BFCTR ( bi target_addr -- ) [ 0x4 ] 2dip BCCTR ;
+: BFL ( bi target_addr -- ) [ 0x4 ] 2dip BCL ;
+: BFLA ( bi target_addr -- ) [ 0x4 ] 2dip BCLA ;
+: BFLRL ( bi target_addr -- ) [ 0x4 ] 2dip BCLRL ;
+: BFCTRL ( bi target_addr -- ) [ 0x4 ] 2dip BCCTRL ;
+: BDNZ ( target_addr -- ) [ 0x10 0 ] dip BC ;
+: BDNZA ( target_addr -- ) [ 0x10 0 ] dip BCA ;
+: BDNZLR ( target_addr -- ) [ 0x10 0 ] dip BCLR ;
+: BDNZL ( target_addr -- ) [ 0x10 0 ] dip BCL ;
+: BDNZLA ( target_addr -- ) [ 0x10 0 ] dip BCLA ;
+: BDNZLRL ( target_addr -- ) [ 0x10 0 ] dip BCLRL ;
+: BDNZT ( bi target_addr -- ) [ 0x8 ] 2dip BC ;
+: BDNZTA ( bi target_addr -- ) [ 0x8 ] 2dip BCA ;
+: BDNZTLR ( bi target_addr -- ) [ 0x8 ] 2dip BCLR ;
+: BDNZTL ( bi target_addr -- ) [ 0x8 ] 2dip BCL ;
+: BDNZTLA ( bi target_addr -- ) [ 0x8 ] 2dip BCLA ;
+: BDNZTLRL ( bi target_addr -- ) [ 0x8 ] 2dip BCLRL ;
+: BDNZF ( bi target_addr -- ) [ 0x0 ] 2dip BC ;
+: BDNZFA ( bi target_addr -- ) [ 0x0 ] 2dip BCA ;
+: BDNZFLR ( bi target_addr -- ) [ 0x0 ] 2dip BCLR ;
+: BDNZFL ( bi target_addr -- ) [ 0x0 ] 2dip BCL ;
+: BDNZFLA ( bi target_addr -- ) [ 0x0 ] 2dip BCLA ;
+: BDNZFLRL ( bi target_addr -- ) [ 0x0 ] 2dip BCLRL ;
+: BDZ ( target_addr -- ) [ 0x12 0 ] dip BC ;
+: BDZA ( target_addr -- ) [ 0x12 0 ] dip BCA ;
+: BDZLR ( target_addr -- ) [ 0x12 0 ] dip BCLR ;
+: BDZL ( target_addr -- ) [ 0x12 0 ] dip BCL ;
+: BDZLA ( target_addr -- ) [ 0x12 0 ] dip BCLA ;
+: BDZLRL ( target_addr -- ) [ 0x12 0 ] dip BCLRL ;
+: BDZT ( bi target_addr -- ) [ 0xA ] 2dip BC ;
+: BDZTA ( bi target_addr -- ) [ 0xA ] 2dip BCA ;
+: BDZTLR ( bi target_addr -- ) [ 0xA ] 2dip BCLR ;
+: BDZTL ( bi target_addr -- ) [ 0xA ] 2dip BCL ;
+: BDZTLA ( bi target_addr -- ) [ 0xA ] 2dip BCLA ;
+: BDZTLRL ( bi target_addr -- ) [ 0xA ] 2dip BCLRL ;
+: BDZF ( bi target_addr -- ) [ 0x2 ] 2dip BC ;
+: BDZFA ( bi target_addr -- ) [ 0x2 ] 2dip BCA ;
+: BDZFLR ( bi target_addr -- ) [ 0x2 ] 2dip BCLR ;
+: BDZFL ( bi target_addr -- ) [ 0x2 ] 2dip BCL ;
+: BDZFLA ( bi target_addr -- ) [ 0x2 ] 2dip BCLA ;
+: BDZFLRL ( bi target_addr -- ) [ 0x2 ] 2dip BCLRL ;
+
+! E.2.3 Branch Mnemonics Incorporating Conditions
+: BLT ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BC ;
+: BLTA ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCA ;
+: BLTLR ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCLR ;
+: BLTCTR ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCCTR ;
+: BLTL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCL ;
+: BLTLA ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCLA ;
+: BLTLRL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCLRL ;
+: BLTCTRL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 12 ] 2dip BCCTRL ;
+: BGT ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BC ;
+: BGTA ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCA ;
+: BGTLR ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCLR ;
+: BGTCTR ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCCTR ;
+: BGTL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCL ;
+: BGTLA ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCLA ;
+: BGTLRL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCLRL ;
+: BGTCTRL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 12 ] 2dip BCCTRL ;
+: BEQ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BC ;
+: BEQA ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCA ;
+: BEQLR ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCLR ;
+: BEQCTR ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCCTR ;
+: BEQL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCL ;
+: BEQLA ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCLA ;
+: BEQLRL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCLRL ;
+: BEQCTRL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 12 ] 2dip BCCTRL ;
+: BSO ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BC ;
+: BSOA ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCA ;
+: BSOLR ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCLR ;
+: BSOCTR ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCCTR ;
+: BSOL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCL ;
+: BSOLA ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCLA ;
+: BSOLRL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCLRL ;
+: BSOCTRL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 12 ] 2dip BCCTRL ;
+: BNL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BC ;
+: BNLA ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCA ;
+: BNLLR ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCLR ;
+: BNLCTR ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCCTR ;
+: BNLL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCL ;
+: BNLLA ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCLA ;
+: BNLLRL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCLRL ;
+: BNLCTRL ( cr target_addr -- ) [ 4 * 0 + ] dip [ 4 ] 2dip BCCTRL ;
+: BNG ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BC ;
+: BNGA ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCA ;
+: BNGLR ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCLR ;
+: BNGCTR ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCCTR ;
+: BNGL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCL ;
+: BNGLA ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCLA ;
+: BNGLRL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCLRL ;
+: BNGCTRL ( cr target_addr -- ) [ 4 * 1 + ] dip [ 4 ] 2dip BCCTRL ;
+: BNE ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BC ;
+: BNEA ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCA ;
+: BNELR ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCLR ;
+: BNECTR ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCCTR ;
+: BNEL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCL ;
+: BNELA ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCLA ;
+: BNELRL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCLRL ;
+: BNECTRL ( cr target_addr -- ) [ 4 * 2 + ] dip [ 4 ] 2dip BCCTRL ;
+: BNS ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BC ;
+: BNSA ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCA ;
+: BNSLR ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCLR ;
+: BNSCTR ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCCTR ;
+: BNSL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCL ;
+: BNSLA ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCLA ;
+: BNSLRL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCLRL ;
+: BNSCTRL ( cr target_addr -- ) [ 4 * 3 + ] dip [ 4 ] 2dip BCCTRL ;
+: BUN ( cr target_addr -- ) BSO ;
+: BUNA ( cr target_addr -- ) BSOA ;
+: BUNLR ( cr target_addr -- ) BSOLR ;
+: BUNCTR ( cr target_addr -- ) BSOCTR ;
+: BUNL ( cr target_addr -- ) BSOL ;
+: BUNLA ( cr target_addr -- ) BSOLA ;
+: BUNLRL ( cr target_addr -- ) BSOLRL ;
+: BUNCTRL ( cr target_addr -- ) BSOCTRL ;
+: BNU ( cr target_addr -- ) BNS ;
+: BNUA ( cr target_addr -- ) BNSA ;
+: BNULR ( cr target_addr -- ) BNSLR ;
+: BNUCTR ( cr target_addr -- ) BNSCTR ;
+: BNUL ( cr target_addr -- ) BNSL ;
+: BNULA ( cr target_addr -- ) BNSLA ;
+: BNULRL ( cr target_addr -- ) BNSLRL ;
+: BNUCTRL ( cr target_addr -- ) BNSCTRL ;
+: BLE ( cr target_addr -- ) BNG ;
+: BLEA ( cr target_addr -- ) BNGA ;
+: BLELR ( cr target_addr -- ) BNGLR ;
+: BLECTR ( cr target_addr -- ) BNGCTR ;
+: BLEL ( cr target_addr -- ) BNGL ;
+: BLELA ( cr target_addr -- ) BNGLA ;
+: BLELRL ( cr target_addr -- ) BNGLRL ;
+: BLECTRL ( cr target_addr -- ) BNGCTRL ;
+: BGE ( cr target_addr -- ) BNL ;
+: BGEA ( cr target_addr -- ) BNLA ;
+: BGELR ( cr target_addr -- ) BNLLR ;
+: BGECTR ( cr target_addr -- ) BNLCTR ;
+: BGEL ( cr target_addr -- ) BNLL ;
+: BGELA ( cr target_addr -- ) BNLLA ;
+: BGELRL ( cr target_addr -- ) BNLLRL ;
+: BGECTRL ( cr target_addr -- ) BNLCTRL ;
+
+! E.2.4 Branch Prediction
+: BT+ ( bi target_addr -- ) [ 0xF ] 2dip BC ;
+: BTA+ ( bi target_addr -- ) [ 0xF ] 2dip BCA ;
+: BTLR+ ( bi target_addr -- ) [ 0xF ] 2dip BCLR ;
+: BTCTR+ ( bi target_addr -- ) [ 0xF ] 2dip BCCTR ;
+: BTL+ ( bi target_addr -- ) [ 0xF ] 2dip BCL ;
+: BTLA+ ( bi target_addr -- ) [ 0xF ] 2dip BCLA ;
+: BTLRL+ ( bi target_addr -- ) [ 0xF ] 2dip BCLRL ;
+: BTCTRL+ ( bi target_addr -- ) [ 0xF ] 2dip BCCTRL ;
+: BF+ ( bi target_addr -- ) [ 0x7 ] 2dip BC ;
+: BFA+ ( bi target_addr -- ) [ 0x7 ] 2dip BCA ;
+: BFLR+ ( bi target_addr -- ) [ 0x7 ] 2dip BCLR ;
+: BFCTR+ ( bi target_addr -- ) [ 0x7 ] 2dip BCCTR ;
+: BFL+ ( bi target_addr -- ) [ 0x7 ] 2dip BCL ;
+: BFLA+ ( bi target_addr -- ) [ 0x7 ] 2dip BCLA ;
+: BFLRL+ ( bi target_addr -- ) [ 0x7 ] 2dip BCLRL ;
+: BFCTRL+ ( bi target_addr -- ) [ 0x7 ] 2dip BCCTRL ;
+: BDNZ+ ( target_addr -- ) [ 0x19 0 ] dip BC ;
+: BDNZA+ ( target_addr -- ) [ 0x19 0 ] dip BCA ;
+: BDNZLR+ ( target_addr -- ) [ 0x19 0 ] dip BCLR ;
+: BDNZL+ ( target_addr -- ) [ 0x19 0 ] dip BCL ;
+: BDNZLA+ ( target_addr -- ) [ 0x19 0 ] dip BCLA ;
+: BDNZLRL+ ( target_addr -- ) [ 0x19 0 ] dip BCLRL ;
+: BDZ+ ( target_addr -- ) [ 0x1B 0 ] dip BC ;
+: BDZA+ ( target_addr -- ) [ 0x1B 0 ] dip BCA ;
+: BDZLR+ ( target_addr -- ) [ 0x1B 0 ] dip BCLR ;
+: BDZL+ ( target_addr -- ) [ 0x1B 0 ] dip BCL ;
+: BDZLA+ ( target_addr -- ) [ 0x1B 0 ] dip BCLA ;
+: BDZLRL+ ( target_addr -- ) [ 0x1B 0 ] dip BCLRL ;
+: BT- ( bi target_addr -- ) [ 0xE ] 2dip BC ;
+: BTA- ( bi target_addr -- ) [ 0xE ] 2dip BCA ;
+: BTLR- ( bi target_addr -- ) [ 0xE ] 2dip BCLR ;
+: BTCTR- ( bi target_addr -- ) [ 0xE ] 2dip BCCTR ;
+: BTL- ( bi target_addr -- ) [ 0xE ] 2dip BCL ;
+: BTLA- ( bi target_addr -- ) [ 0xE ] 2dip BCLA ;
+: BTLRL- ( bi target_addr -- ) [ 0xE ] 2dip BCLRL ;
+: BTCTRL- ( bi target_addr -- ) [ 0xE ] 2dip BCCTRL ;
+: BF- ( bi target_addr -- ) [ 0x6 ] 2dip BC ;
+: BFA- ( bi target_addr -- ) [ 0x6 ] 2dip BCA ;
+: BFLR- ( bi target_addr -- ) [ 0x6 ] 2dip BCLR ;
+: BFCTR- ( bi target_addr -- ) [ 0x6 ] 2dip BCCTR ;
+: BFL- ( bi target_addr -- ) [ 0x6 ] 2dip BCL ;
+: BFLA- ( bi target_addr -- ) [ 0x6 ] 2dip BCLA ;
+: BFLRL- ( bi target_addr -- ) [ 0x6 ] 2dip BCLRL ;
+: BFCTRL- ( bi target_addr -- ) [ 0x6 ] 2dip BCCTRL ;
+: BDNZ- ( target_addr -- ) [ 0x18 0 ] dip BC ;
+: BDNZA- ( target_addr -- ) [ 0x18 0 ] dip BCA ;
+: BDNZLR- ( target_addr -- ) [ 0x18 0 ] dip BCLR ;
+: BDNZL- ( target_addr -- ) [ 0x18 0 ] dip BCL ;
+: BDNZLA- ( target_addr -- ) [ 0x18 0 ] dip BCLA ;
+: BDNZLRL- ( target_addr -- ) [ 0x18 0 ] dip BCLRL ;
+: BDZ- ( target_addr -- ) [ 0x1A 0 ] dip BC ;
+: BDZA- ( target_addr -- ) [ 0x1A 0 ] dip BCA ;
+: BDZLR- ( target_addr -- ) [ 0x1A 0 ] dip BCLR ;
+: BDZL- ( target_addr -- ) [ 0x1A 0 ] dip BCL ;
+: BDZLA- ( target_addr -- ) [ 0x1A 0 ] dip BCLA ;
+: BDZLRL- ( target_addr -- ) [ 0x1A 0 ] dip BCLRL ;
+: BLT+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BC ;
+: BLTA+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCA ;
+: BLTLR+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCLR ;
+: BLTCTR+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCCTR ;
+: BLTL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCL ;
+: BLTLA+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCLA ;
+: BLTLRL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCLRL ;
+: BLTCTRL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 15 ] 2dip BCCTRL ;
+: BGT+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BC ;
+: BGTA+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCA ;
+: BGTLR+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCLR ;
+: BGTCTR+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCCTR ;
+: BGTL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCL ;
+: BGTLA+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCLA ;
+: BGTLRL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCLRL ;
+: BGTCTRL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 15 ] 2dip BCCTRL ;
+: BEQ+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BC ;
+: BEQA+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCA ;
+: BEQLR+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCLR ;
+: BEQCTR+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCCTR ;
+: BEQL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCL ;
+: BEQLA+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCLA ;
+: BEQLRL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCLRL ;
+: BEQCTRL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 15 ] 2dip BCCTRL ;
+: BSO+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BC ;
+: BSOA+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCA ;
+: BSOLR+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCLR ;
+: BSOCTR+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCCTR ;
+: BSOL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCL ;
+: BSOLA+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCLA ;
+: BSOLRL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCLRL ;
+: BSOCTRL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 15 ] 2dip BCCTRL ;
+: BNL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BC ;
+: BNLA+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCA ;
+: BNLLR+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCLR ;
+: BNLCTR+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCCTR ;
+: BNLL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCL ;
+: BNLLA+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCLA ;
+: BNLLRL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCLRL ;
+: BNLCTRL+ ( cr target_addr -- ) [ 4 * 0 + ] dip [ 7 ] 2dip BCCTRL ;
+: BNG+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BC ;
+: BNGA+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCA ;
+: BNGLR+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCLR ;
+: BNGCTR+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCCTR ;
+: BNGL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCL ;
+: BNGLA+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCLA ;
+: BNGLRL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCLRL ;
+: BNGCTRL+ ( cr target_addr -- ) [ 4 * 1 + ] dip [ 7 ] 2dip BCCTRL ;
+: BNE+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BC ;
+: BNEA+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCA ;
+: BNELR+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCLR ;
+: BNECTR+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCCTR ;
+: BNEL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCL ;
+: BNELA+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCLA ;
+: BNELRL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCLRL ;
+: BNECTRL+ ( cr target_addr -- ) [ 4 * 2 + ] dip [ 7 ] 2dip BCCTRL ;
+: BNS+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BC ;
+: BNSA+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCA ;
+: BNSLR+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCLR ;
+: BNSCTR+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCCTR ;
+: BNSL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCL ;
+: BNSLA+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCLA ;
+: BNSLRL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCLRL ;
+: BNSCTRL+ ( cr target_addr -- ) [ 4 * 3 + ] dip [ 7 ] 2dip BCCTRL ;
+: BUN+ ( cr target_addr -- ) BSO+ ;
+: BUNA+ ( cr target_addr -- ) BSOA+ ;
+: BUNLR+ ( cr target_addr -- ) BSOLR+ ;
+: BUNCTR+ ( cr target_addr -- ) BSOCTR+ ;
+: BUNL+ ( cr target_addr -- ) BSOL+ ;
+: BUNLA+ ( cr target_addr -- ) BSOLA+ ;
+: BUNLRL+ ( cr target_addr -- ) BSOLRL+ ;
+: BUNCTRL+ ( cr target_addr -- ) BSOCTRL+ ;
+: BNU+ ( cr target_addr -- ) BNS+ ;
+: BNUA+ ( cr target_addr -- ) BNSA+ ;
+: BNULR+ ( cr target_addr -- ) BNSLR+ ;
+: BNUCTR+ ( cr target_addr -- ) BNSCTR+ ;
+: BNUL+ ( cr target_addr -- ) BNSL+ ;
+: BNULA+ ( cr target_addr -- ) BNSLA+ ;
+: BNULRL+ ( cr target_addr -- ) BNSLRL+ ;
+: BNUCTRL+ ( cr target_addr -- ) BNSCTRL+ ;
+: BLE+ ( cr target_addr -- ) BNG+ ;
+: BLEA+ ( cr target_addr -- ) BNGA+ ;
+: BLELR+ ( cr target_addr -- ) BNGLR+ ;
+: BLECTR+ ( cr target_addr -- ) BNGCTR+ ;
+: BLEL+ ( cr target_addr -- ) BNGL+ ;
+: BLELA+ ( cr target_addr -- ) BNGLA+ ;
+: BLELRL+ ( cr target_addr -- ) BNGLRL+ ;
+: BLECTRL+ ( cr target_addr -- ) BNGCTRL+ ;
+: BGE+ ( cr target_addr -- ) BNL+ ;
+: BGEA+ ( cr target_addr -- ) BNLA+ ;
+: BGELR+ ( cr target_addr -- ) BNLLR+ ;
+: BGECTR+ ( cr target_addr -- ) BNLCTR+ ;
+: BGEL+ ( cr target_addr -- ) BNLL+ ;
+: BGELA+ ( cr target_addr -- ) BNLLA+ ;
+: BGELRL+ ( cr target_addr -- ) BNLLRL+ ;
+: BGECTRL+ ( cr target_addr -- ) BNLCTRL+ ;
+: BLT- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BC ;
+: BLTA- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCA ;
+: BLTLR- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCLR ;
+: BLTCTR- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCCTR ;
+: BLTL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCL ;
+: BLTLA- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCLA ;
+: BLTLRL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCLRL ;
+: BLTCTRL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 14 ] 2dip BCCTRL ;
+: BGT- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BC ;
+: BGTA- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCA ;
+: BGTLR- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCLR ;
+: BGTCTR- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCCTR ;
+: BGTL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCL ;
+: BGTLA- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCLA ;
+: BGTLRL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCLRL ;
+: BGTCTRL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 14 ] 2dip BCCTRL ;
+: BEQ- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BC ;
+: BEQA- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCA ;
+: BEQLR- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCLR ;
+: BEQCTR- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCCTR ;
+: BEQL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCL ;
+: BEQLA- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCLA ;
+: BEQLRL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCLRL ;
+: BEQCTRL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 14 ] 2dip BCCTRL ;
+: BSO- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BC ;
+: BSOA- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCA ;
+: BSOLR- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCLR ;
+: BSOCTR- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCCTR ;
+: BSOL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCL ;
+: BSOLA- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCLA ;
+: BSOLRL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCLRL ;
+: BSOCTRL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 14 ] 2dip BCCTRL ;
+: BNL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BC ;
+: BNLA- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCA ;
+: BNLLR- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCLR ;
+: BNLCTR- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCCTR ;
+: BNLL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCL ;
+: BNLLA- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCLA ;
+: BNLLRL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCLRL ;
+: BNLCTRL- ( cr target_addr -- ) [ 4 * 0 + ] dip [ 6 ] 2dip BCCTRL ;
+: BNG- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BC ;
+: BNGA- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCA ;
+: BNGLR- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCLR ;
+: BNGCTR- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCCTR ;
+: BNGL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCL ;
+: BNGLA- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCLA ;
+: BNGLRL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCLRL ;
+: BNGCTRL- ( cr target_addr -- ) [ 4 * 1 + ] dip [ 6 ] 2dip BCCTRL ;
+: BNE- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BC ;
+: BNEA- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCA ;
+: BNELR- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCLR ;
+: BNECTR- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCCTR ;
+: BNEL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCL ;
+: BNELA- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCLA ;
+: BNELRL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCLRL ;
+: BNECTRL- ( cr target_addr -- ) [ 4 * 2 + ] dip [ 6 ] 2dip BCCTRL ;
+: BNS- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BC ;
+: BNSA- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCA ;
+: BNSLR- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCLR ;
+: BNSCTR- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCCTR ;
+: BNSL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCL ;
+: BNSLA- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCLA ;
+: BNSLRL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCLRL ;
+: BNSCTRL- ( cr target_addr -- ) [ 4 * 3 + ] dip [ 6 ] 2dip BCCTRL ;
+: BUN- ( cr target_addr -- ) BSO- ;
+: BUNA- ( cr target_addr -- ) BSOA- ;
+: BUNLR- ( cr target_addr -- ) BSOLR- ;
+: BUNCTR- ( cr target_addr -- ) BSOCTR- ;
+: BUNL- ( cr target_addr -- ) BSOL- ;
+: BUNLA- ( cr target_addr -- ) BSOLA- ;
+: BUNLRL- ( cr target_addr -- ) BSOLRL- ;
+: BUNCTRL- ( cr target_addr -- ) BSOCTRL- ;
+: BNU- ( cr target_addr -- ) BNS- ;
+: BNUA- ( cr target_addr -- ) BNSA- ;
+: BNULR- ( cr target_addr -- ) BNSLR- ;
+: BNUCTR- ( cr target_addr -- ) BNSCTR- ;
+: BNUL- ( cr target_addr -- ) BNSL- ;
+: BNULA- ( cr target_addr -- ) BNSLA- ;
+: BNULRL- ( cr target_addr -- ) BNSLRL- ;
+: BNUCTRL- ( cr target_addr -- ) BNSCTRL- ;
+: BLE- ( cr target_addr -- ) BNG- ;
+: BLEA- ( cr target_addr -- ) BNGA- ;
+: BLELR- ( cr target_addr -- ) BNGLR- ;
+: BLECTR- ( cr target_addr -- ) BNGCTR- ;
+: BLEL- ( cr target_addr -- ) BNGL- ;
+: BLELA- ( cr target_addr -- ) BNGLA- ;
+: BLELRL- ( cr target_addr -- ) BNGLRL- ;
+: BLECTRL- ( cr target_addr -- ) BNGCTRL- ;
+: BGE- ( cr target_addr -- ) BNL- ;
+: BGEA- ( cr target_addr -- ) BNLA- ;
+: BGELR- ( cr target_addr -- ) BNLLR- ;
+: BGECTR- ( cr target_addr -- ) BNLCTR- ;
+: BGEL- ( cr target_addr -- ) BNLL- ;
+: BGELA- ( cr target_addr -- ) BNLLA- ;
+: BGELRL- ( cr target_addr -- ) BNLLRL- ;
+: BGECTRL- ( cr target_addr -- ) BNLCTRL- ;
+
+! E.3 Condition Register Logical Mnemonics
+: CRSET ( bx -- ) dup dup CREQV ;
+: CRCLR ( bx -- ) dup dup CRXOR ;
+: CRMOVE ( bx by -- ) dup CROR ;
+: CRNOT ( bx by -- ) dup CRNOR ;
+
+! E.4.1 Subtract Immediate
+: SUBI ( dst src1 src2 -- ) neg ADDI ;
+: SUBIS ( dst src1 src2 -- ) neg ADDIS ;
+: SUBIC ( dst src1 src2 -- ) neg ADDIC ;
+: SUBIC. ( dst src1 src2 -- ) neg ADDIC. ;
+
+! E.4.2 Subtract
+: SUB ( rx ry rz -- ) swap SUBF ;
+: SUB. ( rx ry rz -- ) swap SUBF. ;
+: SUBO ( rx ry rz -- ) swap SUBFO ;
+: SUBO. ( rx ry rz -- ) swap SUBFO. ;
+: SUBC ( rx ry rz -- ) swap SUBFC ;
+: SUBC. ( rx ry rz -- ) swap SUBFC. ;
+: SUBCO ( rx ry rz -- ) swap SUBFCO ;
+: SUBCO. ( rx ry rz -- ) swap SUBFCO. ;
+
+! E.5.1 Double Word Comparisons
+: CMPDI ( bf ra si -- ) [ 1 ] 2dip CMPI ;
+: CMPD ( bf ra rb -- ) [ 1 ] 2dip CMP ;
+: CMPLDI ( bf ra ui -- ) [ 1 ] 2dip CMPLI ;
+: CMPLD ( bf ra rb -- ) [ 1 ] 2dip CMPL ;
+
+! E.5.2 Word Comparisons
+: CMPWI ( bf ra si -- ) [ 0 ] 2dip CMPI ;
+: CMPW ( bf ra rb -- ) [ 0 ] 2dip CMP ;
+: CMPLWI ( bf ra ui -- ) [ 0 ] 2dip CMPLI ;
+: CMPLW ( bf ra rb -- ) [ 0 ] 2dip CMPL ;
+
+! E.6 Trap Mnemonics
+: TRAP ( -- ) 31 0 0 TW ;
+: TDUI ( rx n -- ) [ 31 ] 2dip TDI ;
+: TDU ( rx ry -- ) [ 31 ] 2dip TD ;
+: TWUI ( rx n -- ) [ 31 ] 2dip TWI ;
+: TWU ( rx ry -- ) [ 31 ] 2dip TW ;
+: TDLTI ( rx n -- ) [ 16 ] 2dip TDI ;
+: TDLT ( rx ry -- ) [ 16 ] 2dip TD ;
+: TWLTI ( rx n -- ) [ 16 ] 2dip TWI ;
+: TWLT ( rx ry -- ) [ 16 ] 2dip TW ;
+: TDLEI ( rx n -- ) [ 20 ] 2dip TDI ;
+: TDLE ( rx ry -- ) [ 20 ] 2dip TD ;
+: TWLEI ( rx n -- ) [ 20 ] 2dip TWI ;
+: TWLE ( rx ry -- ) [ 20 ] 2dip TW ;
+: TDEQI ( rx n -- ) [ 4 ] 2dip TDI ;
+: TDEQ ( rx ry -- ) [ 4 ] 2dip TD ;
+: TWEQI ( rx n -- ) [ 4 ] 2dip TWI ;
+: TWEQ ( rx ry -- ) [ 4 ] 2dip TW ;
+: TDGEI ( rx n -- ) [ 12 ] 2dip TDI ;
+: TDGE ( rx ry -- ) [ 12 ] 2dip TD ;
+: TWGEI ( rx n -- ) [ 12 ] 2dip TWI ;
+: TWGE ( rx ry -- ) [ 12 ] 2dip TW ;
+: TDGTI ( rx n -- ) [ 8 ] 2dip TDI ;
+: TDGT ( rx ry -- ) [ 8 ] 2dip TD ;
+: TWGTI ( rx n -- ) [ 8 ] 2dip TWI ;
+: TWGT ( rx ry -- ) [ 8 ] 2dip TW ;
+: TDNLI ( rx n -- ) [ 12 ] 2dip TDI ;
+: TDNL ( rx ry -- ) [ 12 ] 2dip TD ;
+: TWNLI ( rx n -- ) [ 12 ] 2dip TWI ;
+: TWNL ( rx ry -- ) [ 12 ] 2dip TW ;
+: TDNEI ( rx n -- ) [ 24 ] 2dip TDI ;
+: TDNE ( rx ry -- ) [ 24 ] 2dip TD ;
+: TWNEI ( rx n -- ) [ 24 ] 2dip TWI ;
+: TWNE ( rx ry -- ) [ 24 ] 2dip TW ;
+: TDNGI ( rx n -- ) [ 20 ] 2dip TDI ;
+: TDNG ( rx ry -- ) [ 20 ] 2dip TD ;
+: TWNGI ( rx n -- ) [ 20 ] 2dip TWI ;
+: TWNG ( rx ry -- ) [ 20 ] 2dip TW ;
+: TDLLTI ( rx n -- ) [ 2 ] 2dip TDI ;
+: TDLLT ( rx ry -- ) [ 2 ] 2dip TD ;
+: TWLLTI ( rx n -- ) [ 2 ] 2dip TWI ;
+: TWLLT ( rx ry -- ) [ 2 ] 2dip TW ;
+: TDLLEI ( rx n -- ) [ 6 ] 2dip TDI ;
+: TDLLE ( rx ry -- ) [ 6 ] 2dip TD ;
+: TWLLEI ( rx n -- ) [ 6 ] 2dip TWI ;
+: TWLLE ( rx ry -- ) [ 6 ] 2dip TW ;
+: TDLGEI ( rx n -- ) [ 5 ] 2dip TDI ;
+: TDLGE ( rx ry -- ) [ 5 ] 2dip TD ;
+: TWLGEI ( rx n -- ) [ 5 ] 2dip TWI ;
+: TWLGE ( rx ry -- ) [ 5 ] 2dip TW ;
+: TDLGTI ( rx n -- ) [ 1 ] 2dip TDI ;
+: TDLGT ( rx ry -- ) [ 1 ] 2dip TD ;
+: TWLGTI ( rx n -- ) [ 1 ] 2dip TWI ;
+: TWLGT ( rx ry -- ) [ 1 ] 2dip TW ;
+: TDLNLI ( rx n -- ) [ 5 ] 2dip TDI ;
+: TDLNL ( rx ry -- ) [ 5 ] 2dip TD ;
+: TWLNLI ( rx n -- ) [ 5 ] 2dip TWI ;
+: TWLNL ( rx ry -- ) [ 5 ] 2dip TW ;
+: TDLNGI ( rx n -- ) [ 6 ] 2dip TDI ;
+: TDLNG ( rx ry -- ) [ 6 ] 2dip TD ;
+: TWLNGI ( rx n -- ) [ 6 ] 2dip TWI ;
+: TWLNG ( rx ry -- ) [ 6 ] 2dip TW ;
+
+! E.7.1 Operations on Doublewords
+: EXTLDI ( ra rs n b -- ) swap 1 - RLDICR ;
+: EXTLDI. ( ra rs n b -- ) swap 1 - RLDICR. ;
+: EXTRDI ( ra rs n b -- ) [ + ] [ drop 64 swap - ] 2bi RLDICL ;
+: EXTRDI. ( ra rs n b -- ) [ + ] [ drop 64 swap - ] 2bi RLDICL. ;
+: INSRDI ( ra rs n b -- ) [ + 64 swap - ] [ nip ] 2bi RLDIMI ;
+: INSRDI. ( ra rs n b -- ) [ + 64 swap - ] [ nip ] 2bi RLDIMI. ;
+: ROTLDI ( ra rs n -- ) 0 RLDICL ;
+: ROTLDI. ( ra rs n -- ) 0 RLDICL. ;
+: ROTRDI ( ra rs n -- ) 64 swap - 0 RLDICL ;
+: ROTRDI. ( ra rs n -- ) 64 swap - 0 RLDICL. ;
+: ROTLD ( ra rs rb -- ) 0 RLDCL ;
+: ROTLD. ( ra rs rb -- ) 0 RLDCL. ;
+: SLDI ( ra rs n -- ) dup 63 swap - RLDICR ;
+: SLDI. ( ra rs n -- ) dup 63 swap - RLDICR. ;
+: SRDI ( ra rs n -- ) dup [ 64 swap - ] dip RLDICL ;
+: SRDI. ( ra rs n -- ) dup [ 64 swap - ] dip RLDICL. ;
+: CLRLDI ( ra rs n -- ) 0 swap RLDICL ;
+: CLRLDI. ( ra rs n -- ) 0 swap RLDICL. ;
+: CLRRDI ( ra rs n -- ) 0 swap 63 swap - RLDICR ;
+: CLRRDI. ( ra rs n -- ) 0 swap 63 swap - RLDICR. ;
+: CLRLSLDI ( ra rs b n -- ) tuck - RLDIC ;
+: CLRLSLDI. ( ra rs b n -- ) tuck - RLDIC. ;
+
+! E.7.2 Operations on Words
+: EXTLWI ( ra rs n b -- ) swap 0 1 - RLWINM ;
+: EXTLWI. ( ra rs n b -- ) swap 0 1 - RLWINM. ;
+: EXTRWI ( ra rs n b -- ) swap dup [ + ] dip 32 swap - 31 RLWINM ;
+: EXTRWI. ( ra rs n b -- ) swap dup [ + ] dip 32 swap - 31 RLWINM. ;
+: INSLWI ( ra rs n b -- ) [ [ drop 32 ] dip - ] [ nip ] [ + 1 - ] 2tri RLWIMI ;
+: INSLWI. ( ra rs n b -- ) [ [ drop 32 ] dip - ] [ nip ] [ + 1 - ] 2tri RLWIMI. ;
+: INSRWI ( ra rs n b -- ) [ + 32 swap - ] [ nip ] [ + 1 - ] 2tri RLWIMI ;
+: INSRWI. ( ra rs n b -- ) [ + 32 swap - ] [ nip ] [ + 1 - ] 2tri RLWIMI. ;
+: ROTLWI ( ra rs n -- ) 0 31 RLWINM ;
+: ROTLWI. ( ra rs n -- ) 0 31 RLWINM. ;
+: ROTRWI ( ra rs n -- ) 32 swap - 0 31 RLWINM ;
+: ROTRWI. ( ra rs n -- ) 32 swap - 0 31 RLWINM. ;
+: ROTLW ( ra rs rb -- ) 0 31 RLWNM ;
+: ROTLW. ( ra rs rb -- ) 0 31 RLWNM. ;
+: SLWI ( ra rs n -- ) 0 over 31 swap - RLWINM ;
+: SLWI. ( ra rs n -- ) 0 over 31 swap - RLWINM. ;
+: SRWI ( ra rs n -- ) [ 32 swap - ] [ ] bi 31 RLWINM ;
+: SRWI. ( ra rs n -- ) [ 32 swap - ] [ ] bi 31 RLWINM. ;
+: CLRLWI ( ra rs n -- ) 0 swap 31 RLWINM ;
+: CLRLWI. ( ra rs n -- ) 0 swap 31 RLWINM. ;
+: CLRRWI ( ra rs n -- ) [ 0 0 ] dip 31 swap - RLWINM ;
+: CLRRWI. ( ra rs n -- ) [ 0 0 ] dip 31 swap - RLWINM. ;
+: CLRLSLWI ( ra rs b n -- ) [ nip ] [ - ] [ nip 31 swap - ] 2tri RLWINM ;
+: CLRLSLWI. ( ra rs b n -- ) [ nip ] [ - ] [ nip 31 swap - ] 2tri RLWINM. ;
+
+! E.8 Move To/From Special Purpose Registers Mnemonics
+: MFXER ( rx -- ) 1 5 shift MFSPR ;
+: MFLR ( rx -- ) 8 5 shift MFSPR ;
+: MFCTR ( rx -- ) 9 5 shift MFSPR ;
+: MFUAMR ( rx -- ) 13 5 shift MFSPR ;
+: MFPPR ( rx -- ) 896 -5 shift MFSPR ;
+: MFPPR32 ( rx -- ) 898 -5 shift MFSPR ;
+: MTXER ( rx -- ) 1 5 shift swap MTSPR ;
+: MTLR ( rx -- ) 8 5 shift swap MTSPR ;
+: MTCTR ( rx -- ) 9 5 shift swap MTSPR ;
+: MTUAMR ( rx -- ) 13 5 shift swap MTSPR ;
+: MTPPR ( rx -- ) 896 -5 shift swap MTSPR ;
+: MTPPR32 ( rx -- ) 898 -5 shift swap MTSPR ;
+
+! E.9 Miscellaneous Mnemonics
+: NOP ( -- ) 0 0 0 ORI ;
+: XNOP ( -- ) 0 0 0 XORI ;
+: LI ( dst value -- ) 0 swap ADDI ;
+: LIS ( dst value -- ) 0 swap ADDIS ;
+: LA ( rx ry d -- ) ADDI ;
+: MR ( dst src -- ) dup OR ;
+: MR. ( dst src -- ) dup OR. ;
+: NOT ( dst src -- ) dup NOR ;
+: NOT. ( dst src -- ) dup NOR. ;
+: MTCR ( rx -- ) 0xff swap MTCRF ; deprecated