PPC32-MACOS

Registers

Type Names
int32 r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r2
float64 f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, f30, f31

Caller (Callee safe, non-volatile) registers

Type Names
int32 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
float64 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32

Supported stack types

Type Number of bytes
stack32 4
stack64 8
stack128 16
stack256 32
stack512 64

Supported integer operations

Supported integer load/store operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
r = s stack32 s int32 r lwz r,s
r = top s stack64 s int32 r lwz r,s
r = bottom s stack64 s int32 r lwz r,!shift4s
r = *(int32 *) (s + n) int32 s, immediate n int32 r lwa r,n(s)
r = *(int32 *) (s - n) int32 s, immediate n int32 r lwa r,-n(s)
r = *(int32 *) (s + t) int32 s, int32 t int32 r lwax r,s,t
r = *(int32 *) (s += n) int32 s, immediate n int32 r, int32 s lwau r,n(s)
r = *(int32 *) (s -= n) int32 s, immediate n int32 r, int32 s lwau r,-n(s)
r = *(int32 *) (s += t) int32 s, int32 t int32 r, int32 s lwaux r,s,t
r = *(uint32 *) (s + n) int32 s, immediate n int32 r lwz r,n(s)
r = *(uint32 *) (s - n) int32 s, immediate n int32 r lwz r,-n(s)
r = *(uint32 *) (s + t) int32 s, int32 t int32 r lwzx r,s,t
r = *(uint32 *) (s += n) int32 s, immediate n int32 r, int32 s lwzu r,n(s)
r = *(uint32 *) (s -= n) int32 s, immediate n int32 r, int32 s lwzu r,-n(s)
r = *(uint32 *) (s += t) int32 s, int32 t int32 r, int32 s lwzux r,s,t
r = *(int16 *) (s + n) int32 s, immediate n int32 r lha r,n(s)
r = *(int16 *) (s - n) int32 s, immediate n int32 r lha r,-n(s)
r = *(int16 *) (s + t) int32 s, int32 t int32 r lhax r,s,t
r = *(int16 *) (s += n) int32 s, immediate n int32 r, int32 s lhau r,n(s)
r = *(int16 *) (s -= n) int32 s, immediate n int32 r, int32 s lhau r,-n(s)
r = *(int16 *) (s += t) int32 s, int32 t int32 r, int32 s lhaux r,s,t
r = *(uint16 *) (s + n) int32 s, immediate n int32 r lhz r,n(s)
r = *(uint16 *) (s - n) int32 s, immediate n int32 r lhz r,-n(s)
r = *(uint16 *) (s + t) int32 s, int32 t int32 r lhzx r,s,t
r = *(uint16 *) (s += n) int32 s, immediate n int32 r, int32 s lhzu r,n(s)
r = *(uint16 *) (s -= n) int32 s, immediate n int32 r, int32 s lhzu r,-n(s)
r = *(uint16 *) (s += t) int32 s, int32 t int32 r, int32 s lhzux r,s,t
r = *(int8 *) (s + n) int32 s, immediate n int32 r lba r,n(s)
r = *(int8 *) (s - n) int32 s, immediate n int32 r lba r,-n(s)
r = *(int8 *) (s + t) int32 s, int32 t int32 r lbax r,s,t
r = *(int8 *) (s += n) int32 s, immediate n int32 r, int32 s lbau r,n(s)
r = *(int8 *) (s -= n) int32 s, immediate n int32 r, int32 s lbau r,-n(s)
r = *(int8 *) (s += t) int32 s, int32 t int32 r, int32 s lbaux r,s,t
r = *(uint8 *) (s + n) int32 s, immediate n int32 r lbz r,n(s)
r = *(uint8 *) (s - n) int32 s, immediate n int32 r lbz r,-n(s)
r = *(uint8 *) (s + t) int32 s, int32 t int32 r lbzx r,s,t
r = *(uint8 *) (s += n) int32 s, immediate n int32 r, int32 s lbzu r,n(s)
r = *(uint8 *) (s -= n) int32 s, immediate n int32 r, int32 s lbzu r,-n(s)
r = *(uint8 *) (s += t) int32 s, int32 t int32 r, int32 s lbzux r,s,t
r = *(swapendian int32 *) s int32 s int32 r lwbrx r,0,s
r = *(swapendian uint32 *) s int32 s int32 r lwbrx r,0,s
r = s int32 s stack32 r stw s,r
r top = s int32 s stack64 r stw s,r
r bottom = s int32 s stack64 r stw s,!shift4r
inplace r top = s int32 s, stack64 r stack64 r stw s,r
inplace r bottom = s int32 s, stack64 r stack64 r stw s,!shift4r
*(uint32 *) (s + n) = r int32 r, int32 s, immediate n stw r,n(s)
*(uint32 *) (s - n) = r int32 r, int32 s, immediate n stw r,-n(s)
*(uint32 *) (s + t) = r int32 r, int32 s, int32 t stwx r,s,t
*(uint32 *) (s += n) = r int32 r, int32 s, immediate n int32 s stwu r,n(s)
*(uint32 *) (s -= n) = r int32 r, int32 s, immediate n int32 s stwu r,-n(s)
*(uint32 *) (s += t) = r int32 r, int32 s, int32 t int32 s stwux r,s,t
*(uint16 *) (s + n) = r int32 r, int32 s, immediate n sth r,n(s)
*(uint16 *) (s - n) = r int32 r, int32 s, immediate n sth r,-n(s)
*(uint16 *) (s + t) = r int32 r, int32 s, int32 t sthx r,s,t
*(uint16 *) (s += n) = r int32 r, int32 s, immediate n int32 s sthu r,n(s)
*(uint16 *) (s -= n) = r int32 r, int32 s, immediate n int32 s sthu r,-n(s)
*(uint16 *) (s += t) = r int32 r, int32 s, int32 t int32 s sthux r,s,t
*(uint8 *) (s + n) = r int32 r, int32 s, immediate n stb r,n(s)
*(uint8 *) (s - n) = r int32 r, int32 s, immediate n stb r,-n(s)
*(uint8 *) (s + t) = r int32 r, int32 s, int32 t stbx r,s,t
*(uint8 *) (s += n) = r int32 r, int32 s, immediate n int32 s stbu r,n(s)
*(uint8 *) (s -= n) = r int32 r, int32 s, immediate n int32 s stbu r,-n(s)
*(uint8 *) (s += t) = r int32 r, int32 s, int32 t int32 s stbux r,s,t
*(swapendian int32 *) s = r int32 r, int32 s stwbrx r,0,s
*(swapendian uint32 *) s = r int32 r, int32 s stwbrx r,0,s

Supported integer arithmetic operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
r = s int32 s int32 r mr r,s
r &= t int32 r, int32 t int32 r and r,r,t
r = s & t int32 s, int32 t int32 r and r,s,t
r = s & (65536 * n) int32 s, immediate n int32 r <, >, = andis. r,s,n
r &= n int32 r, immediate n int32 r <, >, = andi. r,r,n
r = s & n int32 s, immediate n int32 r <, >, = andi. r,s,n
r = &n & 0xffff0000 immediate n int32 r lis r,hi16(n)
r &= ~t int32 r, int32 t int32 r andc r,r,t
r = s & ~t int32 s, int32 t int32 r andc r,s,t
r += t int32 r, int32 t int32 r add r,r,t
r = s + t int32 s, int32 t int32 r add r,s,t
r = s + t int32 s, int32 t int32 r <, >, = add. r,s,t
r = s + t int32 s, int32 t int32 r overflow addo r,s,t
r = s + t int32 s, int32 t int32 r overflow, <, >, = addo. r,s,t
r = s + t int32 s, int32 t int32 r carry addc r,s,t
r = s + t int32 s, int32 t int32 r <, >, =, carry addc. r,s,t
r = s + t int32 s, int32 t int32 r overflow, carry addco r,s,t
r = s + t int32 s, int32 t int32 r overflow, <, >, =, carry addco. r,s,t
r = s + t + carry int32 s, int32 t int32 r carry adde r,s,t
r = s + t + carry int32 s, int32 t int32 r <, >, =, carry adde. r,s,t
r = s + t + carry int32 s, int32 t int32 r overflow, carry addeo r,s,t
r = s + t + carry int32 s, int32 t int32 r overflow, <, >, =, carry addeo. r,s,t
r = s + 65536 * n int32 s, immediate n int32 r addis r,s,n
r += n int32 r, immediate n int32 r addi r,r,n
r = s + n int32 s, immediate n int32 r addi r,s,n
r = s + n int32 s, immediate n int32 r carry addic r,s,n
r = s + n int32 s, immediate n int32 r <, >, =, carry addic. r,s,n
r = -s int32 s int32 r neg r,s
r = -s int32 s int32 r <, >, = neg. r,s
r = -s int32 s int32 r overflow nego r,s
r = -s int32 s int32 r overflow, <, >, = nego. r,s
(int32) s - t int32 s, int32 t <, >, = cmpw s,t
(uint32) s - t int32 s, int32 t <, >, = cmplw s,t
r -= t int32 r, int32 t int32 r subf r,t,r
r = s - t int32 s, int32 t int32 r subf r,t,s
r = s - t int32 s, int32 t int32 r <, >, = subf. r,t,s
r = s - t int32 s, int32 t int32 r overflow subfo r,t,s
r = s - t int32 s, int32 t int32 r overflow, <, >, = subfo. r,t,s
r = s - t int32 s, int32 t int32 r carry subfc r,t,s
r = s - t int32 s, int32 t int32 r <, >, =, carry subfc. r,t,s
r = s - t int32 s, int32 t int32 r overflow, carry subfco r,t,s
r = s - t int32 s, int32 t int32 r overflow, <, >, =, carry subfco. r,t,s
r = s - t + carry - 1 int32 s, int32 t int32 r carry subfe r,t,s
r = s - t + carry - 1 int32 s, int32 t int32 r <, >, =, carry subfe. r,t,s
r = s - t + carry - 1 int32 s, int32 t int32 r overflow, carry subfeo r,t,s
r = s - t + carry - 1 int32 s, int32 t int32 r overflow, <, >, =, carry subfeo. r,t,s
r = s - 65536 * n int32 s, immediate n int32 r addis r,s,-n
r = -n immediate n int32 r li r,-n
(int32) s - n int32 s, immediate n <, >, = cmpwi s,n
(uint32) s - n int32 s, immediate n <, >, = cmplwi s,n
r -= n int32 r, immediate n int32 r addi r,r,-n
r = s - n int32 s, immediate n int32 r addi r,s,-n
r = s - n int32 s, immediate n int32 r carry addic r,s,-n
r = s - n int32 s, immediate n int32 r <, >, =, carry addic. r,s,-n
r = 65536 * n immediate n int32 r lis r,n
r = s << t int32 s, int32 t int32 r slwi r,s,t
r = s <<< t int32 s, int32 t int32 r rlwinm r,s,t,0xffffffff
r = s <<< n int32 s, immediate n int32 r rlwinm r,s,n,0xffffffff
r <<= n int32 r, immediate n int32 r slwi r,r,n
r = s << n int32 s, immediate n int32 r slwi r,s,n
r = (uint32) s >> t int32 s, int32 t int32 r srwi r,s,t
r = (int32) s >> t int32 s, int32 t int32 r srawi r,s,t
(uint32) r >>= n int32 r, immediate n int32 r srwi r,r,n
(int32) r >>= n int32 r, immediate n int32 r srawi r,r,n
r = (uint32) s >> n int32 s, immediate n int32 r srwi r,s,n
r = (int32) s >> n int32 s, immediate n int32 r srawi r,s,n
r = s ^ t int32 s, int32 t int32 r xor r,s,t
r = s ^ (65536 * n) int32 s, immediate n int32 r xoris r,s,n
r = s ^ n int32 s, immediate n int32 r xori r,s,n
r = s ^ ~t int32 s, int32 t int32 r eqv r,s,t
r bits m = s <<< t int32 r, int32 s, int32 t, immediate m int32 r rlwimi r,s,t,m
r bits m = s <<< n int32 r, int32 s, immediate n, immediate m int32 r rlwimi r,s,n,m
r = m & (s <<< t) int32 s, int32 t, immediate m int32 r rlwinm r,s,t,m
r = m & (s <<< n) int32 s, immediate n, immediate m int32 r rlwinm r,s,n,m
r = n immediate n int32 r li r,n
r = n - s int32 s, immediate n int32 r carry subfic r,s,n
r |= t int32 r, int32 t int32 r or r,r,t
r = s | t int32 s, int32 t int32 r or r,s,t
r |= &n & 0xffff int32 r, immediate n int32 r ori r,r,lo16(n)
r = s | (&n & 0xffff) int32 s, immediate n int32 r ori r,s,lo16(n)
r = s | (65536 * n) int32 s, immediate n int32 r oris r,s,n
r |= n int32 r, immediate n int32 r ori r,r,n
r = s | n int32 s, immediate n int32 r ori r,s,n
r |= ~t int32 r, int32 t int32 r orc r,r,t
r = s | ~t int32 s, int32 t int32 r orc r,s,t
r = s ~& t int32 s, int32 t int32 r nand r,s,t
r = s ~^ t int32 s, int32 t int32 r eqv r,s,t
r = s ~| t int32 s, int32 t int32 r nor r,s,t

Supported floating point operations

Supported floating point load/store operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
r = s stack64 s float64 r lfd r,s
r = *(float64 *) (s + n) int32 s, immediate n float64 r lfd r,n(s)
r = *(float64 *) (s - n) int32 s, immediate n float64 r lfd r,-n(s)
r = *(float64 *) (s + t) int32 s, int32 t float64 r lfdx r,s,t
r = s float64 s stack64 r stfd s,r
*(float64 *) (s + n) = r float64 r, int32 s, immediate n stfd r,n(s)
*(float64 *) (s - n) = r float64 r, int32 s, immediate n stfd r,-n(s)
*(float64 *) (s + t) = r float64 r, int32 s, int32 t stfdx r,s,t
*(float64 *) (s += n) = r float64 r, int32 s, immediate n int32 s stfdu r,n(s)
*(float64 *) (s -= n) = r float64 r, int32 s, immediate n int32 s stfdu r,-n(s)
*(float64 *) (s += t) = r float64 r, int32 s, int32 t int32 s stfdux r,s,t

Supported floating point arithmetic operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
r = s float64 s float64 r fmr r,s
r *= t float64 r, float64 t float64 r fmul r,r,t
r = s * t float64 s, float64 t float64 r fmul r,s,t
r = s * t + u float64 s, float64 t, float64 u float64 r fmadd r,s,t,u
r = s * t - u float64 s, float64 t, float64 u float64 r fmsub r,s,t,u
r += t float64 r, float64 t float64 r fadd r,r,t
r = s + t float64 s, float64 t float64 r fadd r,s,t
r += s * t float64 r, float64 s, float64 t float64 r fmadd r,s,t,r
r -= t float64 r, float64 t float64 r fsub r,r,t
r = s - t float64 s, float64 t float64 r fsub r,s,t
r = -(s * t + u) float64 s, float64 t, float64 u float64 r fnmadd r,s,t,u
r = -(s * t - u) float64 s, float64 t, float64 u float64 r fnmsub r,s,t,u

Supported misc operations

Supported misc misc operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
caller r
f# immediate f .label.f!:
round to nearest mtfsfi 7,0

Supported branch operations

Supported branch conditional operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
goto f if = immediate f = beq .label.f
goto f if != immediate f = bne .label.f
goto f if < immediate f < blt .label.f
goto f if !< immediate f < bge .label.f
goto f if > immediate f > bgt .label.f
goto f if !> immediate f > ble .label.f

Supported branch unconditional operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
goto f immediate f b .label.f

Supported declaration operations

Supported declaration misc operations

Qhasm Instruction Input Evaluated flags Output Set flags Assembly Code
float64 r
int32 r
stack128 r
stack256 r
stack32 r
stack512 r
stack64 r