factor/basis/cpu/ppc/assembler/assembler.factor

2006 lines
94 KiB
Factor

! Copyright (C) 2011 Erik Charlebois.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel namespaces words math math.order locals math.bitwise io.binary make ;
IN: cpu.ppc.assembler
! This vocabulary implements the V2.06B Power ISA found at http://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
: 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 ( target_addr -- ) -2 shift 0 0 18 i-insn ;
GENERIC: BL ( target_addr/label -- )
M: integer BL ( target_addr -- ) -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 ( bo bi target_addr -- ) -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 -- ) [ swap ] dip 28 d-insn ;
: ANDIS. ( ra rs ui -- ) [ swap ] dip 29 d-insn ;
: ORI ( ra rs ui -- ) [ swap ] dip 24 d-insn ;
: ORIS ( ra rs ui -- ) [ swap ] dip 25 d-insn ;
: XORI ( ra rs ui -- ) [ swap ] dip 26 d-insn ;
: XORIS ( ra rs ui -- ) [ swap ] dip 27 d-insn ;
: AND ( ra rs rb -- ) [ swap ] dip 28 0 31 x-insn ;
: AND. ( ra rs rb -- ) [ swap ] dip 28 1 31 x-insn ;
: OR ( ra rs rb -- ) [ swap ] dip 444 0 31 x-insn ;
: OR. ( ra rs rb -- ) [ swap ] dip 444 1 31 x-insn ;
: XOR ( ra rs rb -- ) [ swap ] dip 316 0 31 x-insn ;
: XOR. ( ra rs rb -- ) [ swap ] dip 316 1 31 x-insn ;
: NAND ( ra rs rb -- ) [ swap ] dip 476 0 31 x-insn ;
: NAND. ( ra rs rb -- ) [ swap ] dip 476 1 31 x-insn ;
: NOR ( ra rs rb -- ) [ swap ] dip 124 0 31 x-insn ;
: NOR. ( ra rs rb -- ) [ swap ] dip 124 1 31 x-insn ;
: ANDC ( ra rs rb -- ) [ swap ] dip 60 0 31 x-insn ;
: ANDC. ( ra rs rb -- ) [ swap ] dip 60 1 31 x-insn ;
: EQV ( ra rs rb -- ) [ swap ] dip 284 0 31 x-insn ;
: EQV. ( ra rs rb -- ) [ swap ] dip 284 1 31 x-insn ;
: ORC ( ra rs rb -- ) [ swap ] dip 412 0 31 x-insn ;
: ORC. ( ra rs rb -- ) [ swap ] dip 412 1 31 x-insn ;
: CMPB ( ra rs rb -- ) [ swap ] dip 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 -- ) [ swap ] dip 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 -- ) [ swap ] dip 24 0 31 x-insn ;
: SLW. ( ra rs rb -- ) [ swap ] dip 24 1 31 x-insn ;
: SRW ( ra rs rb -- ) [ swap ] dip 536 0 31 x-insn ;
: SRW. ( ra rs rb -- ) [ swap ] dip 536 1 31 x-insn ;
: SRAWI ( ra rs sh -- ) [ swap ] dip 824 0 31 x-insn ;
: SRAWI. ( ra rs sh -- ) [ swap ] dip 824 1 31 x-insn ;
: SRAW ( ra rs rb -- ) [ swap ] dip 792 0 31 x-insn ;
: SRAW. ( ra rs rb -- ) [ swap ] dip 792 1 31 x-insn ;
! 3.3.13.2.1 64-bit Fixed-Point Shift Instructions
: SLD ( ra rs rb -- ) [ swap ] dip 27 0 31 x-insn ;
: SLD. ( ra rs rb -- ) [ swap ] dip 27 1 31 x-insn ;
: SRD ( ra rs rb -- ) [ swap ] dip 539 0 31 x-insn ;
: SRD. ( ra rs rb -- ) [ swap ] dip 539 1 31 x-insn ;
: SRAD ( ra rs rb -- ) [ swap ] dip 794 0 31 x-insn ;
: SRAD. ( ra rs rb -- ) [ swap ] dip 794 1 31 x-insn ;
: SRADI ( ra rs sh -- )
[ swap ] dip [ 0x1f bitand ] [ -5 shift ] bi
413 swap 0 31 xs-insn ;
: SRADI. ( ra rs sh -- )
[ swap ] dip [ 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 -- ) [ swap ] dip 0 78 31 x-insn ; deprecated
: DLMZB. ( ra rs rb -- ) [ swap ] dip 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 -- ) swap over - RLDIC ;
: CLRLSLDI. ( ra rs b n -- ) swap over - 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