Skip to content

Instantly share code, notes, and snippets.

@riptl
Last active August 14, 2021 04:10
Show Gist options
  • Save riptl/07837e663c2dbb15404f57476aa2c15f to your computer and use it in GitHub Desktop.
Save riptl/07837e663c2dbb15404f57476aa2c15f to your computer and use it in GitHub Desktop.
PowerPC 750CL instruction bit patterns

PowerPC 750CL instruction bit patterns

The following listing describes the static bit pattern of each opcode.

patterns.txt

Syntax:

line: opcode <pattern>...
pattern: start,stop,value

Pattern interpretation:

  • Zero bit is MSB.
  • start is the first bit of the mask (inclusive).
  • stop is the last bit of the mask (inclusive).
  • value is the decimal value behind the mask.

masks.txt

Syntax:

line: opcode <mask> <value>

To check whether an instruction matches an opcode, compute instruction & mask == value.

add 0,5,31 21,30,266
addc 0,5,31 21,30,21
adde 0,5,31 21,30,138
addi 0,5,14
addic 0,5,12
addic. 0,5,13
addis 0,5,15
addme 0,5,31 16,20,0 22,30,234
addze 0,5,31 16,20,0 22,30,202
and 0,5,31 21,30,28
andc 0,5,31 21,30,60
andi 0,5,28
andis. 0,5,29
b 0,5,18
bc 0,5,16
bcctr 0,5,19 16,20,0 21,31,528
bclr 0,5,19 16,20,0 21,30,16
cmp 0,5,31 9,9,0 21,31,0
cmpi 0,5,11 9,9,0
cmpl 0,5,31 9,9,0 21,30,32 31,31,0
cmpli 0,5,10 9,9,0
cntlzw 0,5,31 16,20,0 21,30,26
crand 0,5,19 21,30,257 31,31,0
crandc 0,5,19 21,30,129 31,31,0
creqv 0,5,19 21,30,289 31,31,0
crnand 0,5,19 21,30,225 31,31,0
crnor 0,5,19 21,30,33 31,31,0
cror 0,5,19 21,30,449 31,31,0
crxor 0,5,19 21,30,193 31,31,0
dcbf 0,5,31 6,10,0 21,30,86 31,31,0
dcbi 0,5,31 6,10,0 21,30,470 31,31,0
dcbst 0,5,31 6,10,0 21,30,54 31,31,0
dcbt 0,5,31 6,10,0 21,30,278 31,31,0
dcbtst 0,5,31 6,10,0 21,30,246 31,31,0
dcbz 0,5,31 6,10,0 21,30,1014 31,31,0
dcbz_l 0,5,4 6,10,0 21,30,1014 31,31,0
divw 0,5,31 22,30,491
divwu 0,5,31 22,30,459
eciwx 0,5,31 22,30,310 31,31,0
ecowx 0,5,31 22,30,438 31,31,0
eieio 0,5,31 6,20,0 21,30,854 31,31,0
eqv 0,5,31 22,30,284
extsb 0,5,31 16,20,0 21,30,954
extsh 0,5,31 16,20,0 21,30,922
fabs 0,5,63 11,15,0 21,30,922
fadd 0,5,63 21,25,0 26,30,21
fadds 0,5,59 21,25,0 26,30,21
fcmpo 0,5,63 9,10,0 21,30,32 31,31,0
fcmpu 0,5,63 9,10,0 21,30,0 31,31,0
fctiw 0,5,63 11,15,0 21,30,14
fctiwz 0,5,63 11,15,0 21,30,15
fdiv 0,5,63 21,25,0 26,30,18
fdivs 0,5,59 21,25,0 26,30,18
fmadd 0,5,63 26,30,29
fmadds 0,5,59 26,30,29
fmr 0,5,63 11,15,0 21,30,72
fmsub 0,5,63 26,30,28
fmsubs 0,5,59 26,30,28
fmul 0,5,63 16,20,0 26,30,25
fmuls 0,5,59 16,20,0 26,30,25
fnabs 0,5,63 11,15,0 21,30,136
fneg 0,5,63 11,15,0 21,30,40
fnmadd 0,5,63 26,30,31
fnmadds 0,5,59 26,30,31
fnmsub 0,5,63 26,30,30
fnmsubs 0,5,59 26,30,30
fres 0,5,59 11,15,0 21,25,0 26,30,24
frsp 0,5,63 11,15,0 21,30,12
frsqrte 0,5,63 11,15,0 21,25,0 26,30,26
fsel 0,5,63 26,30,23
fsub 0,5,63 21,25,0 26,30,20
fsubsx 0,5,59 21,25,0 26,30,20
icbi 0,5,31 6,10,0 21,30,982 31,31,0
isync 0,5,19 6,20,0 21,30,150 31,31,0
lbz 0,5,34
lbzu 0,5,35
lbzux 0,5,31 21,30,119 31,31,0
lbzx 0,5,31 21,30,87 31,31,0
lfd 0,5,50
lfdu 0,5,51
lfdux 0,5,31 21,30,631 31,31,0
lfdx 0,5,31 21,30,559 31,31,0
lfs 0,5,48
lfsu 0,5,49
lfsux 0,5,31 21,30,567 31,31,0
lfsx 0,5,31 21,30,535 31,31,0
lha 0,5,42
lhau 0,5,43
lhaux 0,5,31 21,30,375 31,31,0
lhax 0,5,31 21,30,343 31,31,0
lhbrx 0,5,31 21,30,790 31,31,0
lhz 0,5,40
lhzu 0,5,41
lhzux 0,5,31 21,30,311 31,31,0
lhzx 0,5,31 21,30,279 31,31,0
lmw 0,5,46
lswi 0,5,31 21,30,597 31,31,0
lswx 0,5,31 21,30,533 31,31,0
lwarx 0,5,31 21,30,20 31,31,0
lwbrx 0,5,31 21,30,534 31,31,0
lwz 0,5,32
lwzu 0,5,33
lwzux 0,5,31 21,30,55 31,31,0
lwzx 0,5,31 21,30,23 31,31,0
mcrf 0,5,19 10,11,0 20,31,0
mcrfs 0,5,63 10,11,0 16,24,0 25,30,64 31,31,0
mcrxr 0,5,31 10,11,0 16,24,0 25,30,512 31,31,0
mfcr 0,5,31 11,20,0 21,30,19 31,31,0
mffs 0,5,31 11,20,0 21,30,583
mfcr 0,5,31 11,20,0 21,30,83 31,31,0
mfspr 0,5,31 21,30,339 31,31,0
mfsr 0,5,31 11,11,0 16,20,0 21,30,595 31,31,0
mfsrin 0,5,31 11,15,0 21,30,659 31,31,0
mftb 0,5,31 21,30,371 31,31,0
mtcrf 0,5,31 11,11,0 20,20,0 21,30,144 31,31,0
mtfsb0 0,5,63 11,20,0 21,30,70
mtfsb0 0,5,63 11,20,0 21,30,38
mtfsf 0,5,63 6,6,0 15,15,0 21,30,711
mtfsfi 0,5,63 9,15,0 20,20,0 21,30,134
mtmsr 0,5,31 11,20,0 21,30,146 31,31,0
mtspr 0,5,31 21,30,467 31,31,0
mtsr 0,5,31 11,11,0 16,20,0 21,30,210 31,31,0
mtsrin 0,5,31 11,15,0 21,30,242 31,31,0
mulhw 0,5,31 21,21,0 22,30,75
mulhwu 0,5,31 21,21,0 22,30,11
mulli 0,5,7
mullw 0,5,31 22,30,235
nand 0,5,31 21,30,476
neg 0,5,31 16,20,0 21,30,104
nor 0,5,31 21,30,124
or 0,5,31 21,30,444
orc 0,5,31 21,30,412
ori 0,5,24
oris 0,5,25
psq_l 0,5,56
psq_lu 0,5,57
psq_lux 0,5,4 25,30,38 31,31,0
psq_lx 0,5,4 25,30,6 31,31,0
psq_st 0,5,60
psq_stu 0,5,61
psq_stux 0,5,4 25,30,39 31,31,0
psq_stx 0,5,4 25,30,7 31,31,0
ps_abs 0,5,4 11,15,0 21,30,264
ps_add 0,5,4 21,25,0 26,30,21
ps_cmpo0 0,5,4 9,10,0 21,30,32 31,31,0
ps_cmpo1 0,5,4 9,10,0 21,30,96 31,31,0
ps_cmpu0 0,5,4 9,10,0 21,30,0 31,31,0
ps_cmpu1 0,5,4 9,10,0 21,30,64 31,31,0
ps_div 0,5,4 21,25,0 26,30,18
ps_madd 0,5,4 26,30,29
ps_madds0 0,5,4 26,30,14
ps_madds1 0,5,4 26,30,15
ps_merge00 0,5,4 21,30,528
ps_merge01 0,5,4 21,30,560
ps_merge10 0,5,4 21,30,592
ps_merge11 0,5,4 21,30,624
ps_mr 0,5,4 11,15,0 21,30,72
ps_msub 0,5,4 26,30,28
ps_mul 0,5,4 16,20,0 26,30,25
ps_muls0 0,5,4 16,20,0 26,30,12
ps_muls1 0,5,4 16,20,0 26,30,13
ps_nabs 0,5,4 11,15,0 21,30,136
ps_neg 0,5,4 11,15,0 21,30,40
ps_nmadd 0,5,4 26,30,31
ps_nmadd 0,5,4 26,30,30
ps_res 0,5,4 11,15,0 21,25,0 26,30,24
ps_rsqrte 0,5,4 11,15,0 21,25,0 26,30,26
ps_sel 0,5,4 26,30,23
ps_sel 0,5,4 21,25,0 26,30,20
ps_sum0 0,5,4 26,30,10
ps_sum1 0,5,4 26,30,11
rfi 0,5,19 6,20,0 31,31,0
rlwimi 0,5,20
rlwinm 0,5,21
rlwnm 0,5,23
sc 0,5,17 6,29,0 30,30,1 31,31,0
slw 0,5,31 21,30,24
sraw 0,5,31 21,30,792
srawi 0,5,31 21,30,824
srw 0,5,31 21,30,536
stb 0,5,38
stbu 0,5,39
stbux 0,5,31 22,30,247 31,31,0
stbx 0,5,31 22,30,215 31,31,0
stfd 0,5,54
stfdu 0,5,55
stfdux 0,5,31 22,30,759 31,31,0
stfdx 0,5,31 22,30,727 31,31,0
stfiwx 0,5,31 21,30,983 31,31,0
stfs 0,5,52
stfsu 0,5,53
stfsux 0,5,31 22,30,695 31,31,0
stfsx 0,5,31 22,30,663 31,31,0
sth 0,5,44
sthbrx 0,5,31 21,30,918 31,31,0
sthu 0,5,45
sthux 0,5,31 22,30,439 31,31,0
sthx 0,5,31 22,30,407 31,31,0
stmw 0,5,47
stswi 0,5,31 21,30,725 31,31,0
stswx 0,5,31 21,30,661 31,31,0
stw 0,5,36
stwbrx 0,5,31 21,30,662 31,31,0
stwcx. 0,5,531 21,30,150 31,31,1
stwu 0,5,37
stwux 0,5,31 22,30,183 31,31,0
stwux 0,5,31 22,30,151 31,31,0
subf 0,5,31 22,30,40
subf 0,5,31 22,30,8
subfe 0,5,31 22,30,136
subfic 0,5,8
subfme 0,5,31 16,20,0 22,30,232
subfze 0,5,31 16,20,0 22,30,200
sync 0,5,31 6,20,0 21,30,598 31,31,0
tlbie 0,5,31 6,15,0 21,30,306 31,31,0
tlbsync 0,5,31 6,20,0 21,30,566 31,31,0
tw 0,5,31 21,30,4 31,31,0
twi 0,5,3
xor 0,5,31 21,30,316
xori 0,5,26
xoris 0,5,27
def apply_pattern(pattern, mask, bits):
start, stop, value = map(int, pattern.split(","))
bit_count = stop - start + 1
shift = 31 - stop
mask |= ((1 << bit_count) - 1) << shift
bits |= value << shift
return mask, bits
def dump_mask(line):
parts = line.split(" ")
opcode = parts[0]
patterns = parts[1:]
assert len(patterns) > 0
mask, bits = 0, 0
for pattern in patterns:
mask, bits = apply_pattern(pattern, mask, bits)
print(opcode, hex(mask), hex(bits))
def main():
with open("patterns.txt", "r") as file:
for line in file.readlines():
dump_mask(line)
if __name__ == "__main__":
main()
add 0xfc0007fe 0x7c000214
addc 0xfc0007fe 0x7c00002a
adde 0xfc0007fe 0x7c000114
addi 0xfc000000 0x38000000
addic 0xfc000000 0x30000000
addic. 0xfc000000 0x34000000
addis 0xfc000000 0x3c000000
addme 0xfc00fbfe 0x7c0001d4
addze 0xfc00fbfe 0x7c000194
and 0xfc0007fe 0x7c000038
andc 0xfc0007fe 0x7c000078
andi 0xfc000000 0x70000000
andis. 0xfc000000 0x74000000
b 0xfc000000 0x48000000
bc 0xfc000000 0x40000000
bcctr 0xfc00ffff 0x4c000210
bclr 0xfc00fffe 0x4c000020
cmp 0xfc4007ff 0x7c000000
cmpi 0xfc400000 0x2c000000
cmpl 0xfc4007ff 0x7c000040
cmpli 0xfc400000 0x28000000
cntlzw 0xfc00fffe 0x7c000034
crand 0xfc0007ff 0x4c000202
crandc 0xfc0007ff 0x4c000102
creqv 0xfc0007ff 0x4c000242
crnand 0xfc0007ff 0x4c0001c2
crnor 0xfc0007ff 0x4c000042
cror 0xfc0007ff 0x4c000382
crxor 0xfc0007ff 0x4c000182
dcbf 0xffe007ff 0x7c0000ac
dcbi 0xffe007ff 0x7c0003ac
dcbst 0xffe007ff 0x7c00006c
dcbt 0xffe007ff 0x7c00022c
dcbtst 0xffe007ff 0x7c0001ec
dcbz 0xffe007ff 0x7c0007ec
dcbz_l 0xffe007ff 0x100007ec
divw 0xfc0003fe 0x7c0003d6
divwu 0xfc0003fe 0x7c000396
eciwx 0xfc0003ff 0x7c00026c
ecowx 0xfc0003ff 0x7c00036c
eieio 0xffffffff 0x7c0006ac
eqv 0xfc0003fe 0x7c000238
extsb 0xfc00fffe 0x7c000774
extsh 0xfc00fffe 0x7c000734
fabs 0xfc1f07fe 0xfc000734
fadd 0xfc0007fe 0xfc00002a
fadds 0xfc0007fe 0xec00002a
fcmpo 0xfc6007ff 0xfc000040
fcmpu 0xfc6007ff 0xfc000000
fctiw 0xfc1f07fe 0xfc00001c
fctiwz 0xfc1f07fe 0xfc00001e
fdiv 0xfc0007fe 0xfc000024
fdivs 0xfc0007fe 0xec000024
fmadd 0xfc00003e 0xfc00003a
fmadds 0xfc00003e 0xec00003a
fmr 0xfc1f07fe 0xfc000090
fmsub 0xfc00003e 0xfc000038
fmsubs 0xfc00003e 0xec000038
fmul 0xfc00f83e 0xfc000032
fmuls 0xfc00f83e 0xec000032
fnabs 0xfc1f07fe 0xfc000110
fneg 0xfc1f07fe 0xfc000050
fnmadd 0xfc00003e 0xfc00003e
fnmadds 0xfc00003e 0xec00003e
fnmsub 0xfc00003e 0xfc00003c
fnmsubs 0xfc00003e 0xec00003c
fres 0xfc1f07fe 0xec000030
frsp 0xfc1f07fe 0xfc000018
frsqrte 0xfc1f07fe 0xfc000034
fsel 0xfc00003e 0xfc00002e
fsub 0xfc0007fe 0xfc000028
fsubsx 0xfc0007fe 0xec000028
icbi 0xffe007ff 0x7c0007ac
isync 0xffffffff 0x4c00012c
lbz 0xfc000000 0x88000000
lbzu 0xfc000000 0x8c000000
lbzux 0xfc0007ff 0x7c0000ee
lbzx 0xfc0007ff 0x7c0000ae
lfd 0xfc000000 0xc8000000
lfdu 0xfc000000 0xcc000000
lfdux 0xfc0007ff 0x7c0004ee
lfdx 0xfc0007ff 0x7c00045e
lfs 0xfc000000 0xc0000000
lfsu 0xfc000000 0xc4000000
lfsux 0xfc0007ff 0x7c00046e
lfsx 0xfc0007ff 0x7c00042e
lha 0xfc000000 0xa8000000
lhau 0xfc000000 0xac000000
lhaux 0xfc0007ff 0x7c0002ee
lhax 0xfc0007ff 0x7c0002ae
lhbrx 0xfc0007ff 0x7c00062c
lhz 0xfc000000 0xa0000000
lhzu 0xfc000000 0xa4000000
lhzux 0xfc0007ff 0x7c00026e
lhzx 0xfc0007ff 0x7c00022e
lmw 0xfc000000 0xb8000000
lswi 0xfc0007ff 0x7c0004aa
lswx 0xfc0007ff 0x7c00042a
lwarx 0xfc0007ff 0x7c000028
lwbrx 0xfc0007ff 0x7c00042c
lwz 0xfc000000 0x80000000
lwzu 0xfc000000 0x84000000
lwzux 0xfc0007ff 0x7c00006e
lwzx 0xfc0007ff 0x7c00002e
mcrf 0xfc300fff 0x4c000000
mcrfs 0xfc30ffff 0xfc000080
mcrxr 0xfc30ffff 0x7c000400
mfcr 0xfc1fffff 0x7c000026
mffs 0xfc1ffffe 0x7c00048e
mfcr 0xfc1fffff 0x7c0000a6
mfspr 0xfc0007ff 0x7c0002a6
mfsr 0xfc10ffff 0x7c0004a6
mfsrin 0xfc1f07ff 0x7c000526
mftb 0xfc0007ff 0x7c0002e6
mtcrf 0xfc100fff 0x7c000120
mtfsb0 0xfc1ffffe 0xfc00008c
mtfsb0 0xfc1ffffe 0xfc00004c
mtfsf 0xfe0107fe 0xfc00058e
mtfsfi 0xfc7f0ffe 0xfc00010c
mtmsr 0xfc1fffff 0x7c000124
mtspr 0xfc0007ff 0x7c0003a6
mtsr 0xfc10ffff 0x7c0001a4
mtsrin 0xfc1f07ff 0x7c0001e4
mulhw 0xfc0007fe 0x7c000096
mulhwu 0xfc0007fe 0x7c000016
mulli 0xfc000000 0x1c000000
mullw 0xfc0003fe 0x7c0001d6
nand 0xfc0007fe 0x7c0003b8
neg 0xfc00fffe 0x7c0000d0
nor 0xfc0007fe 0x7c0000f8
or 0xfc0007fe 0x7c000378
orc 0xfc0007fe 0x7c000338
ori 0xfc000000 0x60000000
oris 0xfc000000 0x64000000
psq_l 0xfc000000 0xe0000000
psq_lu 0xfc000000 0xe4000000
psq_lux 0xfc00007f 0x1000004c
psq_lx 0xfc00007f 0x1000000c
psq_st 0xfc000000 0xf0000000
psq_stu 0xfc000000 0xf4000000
psq_stux 0xfc00007f 0x1000004e
psq_stx 0xfc00007f 0x1000000e
ps_abs 0xfc1f07fe 0x10000210
ps_add 0xfc0007fe 0x1000002a
ps_cmpo0 0xfc6007ff 0x10000040
ps_cmpo1 0xfc6007ff 0x100000c0
ps_cmpu0 0xfc6007ff 0x10000000
ps_cmpu1 0xfc6007ff 0x10000080
ps_div 0xfc0007fe 0x10000024
ps_madd 0xfc00003e 0x1000003a
ps_madds0 0xfc00003e 0x1000001c
ps_madds1 0xfc00003e 0x1000001e
ps_merge00 0xfc0007fe 0x10000420
ps_merge01 0xfc0007fe 0x10000460
ps_merge10 0xfc0007fe 0x100004a0
ps_merge11 0xfc0007fe 0x100004e0
ps_mr 0xfc1f07fe 0x10000090
ps_msub 0xfc00003e 0x10000038
ps_mul 0xfc00f83e 0x10000032
ps_muls0 0xfc00f83e 0x10000018
ps_muls1 0xfc00f83e 0x1000001a
ps_nabs 0xfc1f07fe 0x10000110
ps_neg 0xfc1f07fe 0x10000050
ps_nmadd 0xfc00003e 0x1000003e
ps_nmadd 0xfc00003e 0x1000003c
ps_res 0xfc1f07fe 0x10000030
ps_rsqrte 0xfc1f07fe 0x10000034
ps_sel 0xfc00003e 0x1000002e
ps_sel 0xfc0007fe 0x10000028
ps_sum0 0xfc00003e 0x10000014
ps_sum1 0xfc00003e 0x10000016
rfi 0xfffff801 0x4c000000
rlwimi 0xfc000000 0x50000000
rlwinm 0xfc000000 0x54000000
rlwnm 0xfc000000 0x5c000000
sc 0xffffffff 0x44000002
slw 0xfc0007fe 0x7c000030
sraw 0xfc0007fe 0x7c000630
srawi 0xfc0007fe 0x7c000670
srw 0xfc0007fe 0x7c000430
stb 0xfc000000 0x98000000
stbu 0xfc000000 0x9c000000
stbux 0xfc0003ff 0x7c0001ee
stbx 0xfc0003ff 0x7c0001ae
stfd 0xfc000000 0xd8000000
stfdu 0xfc000000 0xdc000000
stfdux 0xfc0003ff 0x7c0005ee
stfdx 0xfc0003ff 0x7c0005ae
stfiwx 0xfc0007ff 0x7c0007ae
stfs 0xfc000000 0xd0000000
stfsu 0xfc000000 0xd4000000
stfsux 0xfc0003ff 0x7c00056e
stfsx 0xfc0003ff 0x7c00052e
sth 0xfc000000 0xb0000000
sthbrx 0xfc0007ff 0x7c00072c
sthu 0xfc000000 0xb4000000
sthux 0xfc0003ff 0x7c00036e
sthx 0xfc0003ff 0x7c00032e
stmw 0xfc000000 0xbc000000
stswi 0xfc0007ff 0x7c0005aa
stswx 0xfc0007ff 0x7c00052a
stw 0xfc000000 0x90000000
stwbrx 0xfc0007ff 0x7c00052c
stwcx. 0xfc0007ff 0x84c00012d
stwu 0xfc000000 0x94000000
stwux 0xfc0003ff 0x7c00016e
stwux 0xfc0003ff 0x7c00012e
subf 0xfc0003fe 0x7c000050
subf 0xfc0003fe 0x7c000010
subfe 0xfc0003fe 0x7c000110
subfic 0xfc000000 0x20000000
subfme 0xfc00fbfe 0x7c0001d0
subfze 0xfc00fbfe 0x7c000190
sync 0xffffffff 0x7c0004ac
tlbie 0xffff07ff 0x7c000264
tlbsync 0xffffffff 0x7c00046c
tw 0xfc0007ff 0x7c000008
twi 0xfc000000 0xc000000
xor 0xfc0007fe 0x7c000278
xori 0xfc000000 0x68000000
xoris 0xfc000000 0x6c000000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment