5 changed files with 379 additions and 0 deletions
-
8docs/dynarmic/PowerPC.md
-
1docs/dynarmic/README.md
-
145externals/powah/altivec_data.txt
-
3externals/powah/build.sh
-
222externals/powah/data.txt
@ -0,0 +1,8 @@ |
|||||
|
# PowerPC 64 backend |
||||
|
|
||||
|
The ppc64 backend currently only supports the little endian variant, with big endian support being experimental for the time being. Additionally only A32 is supported (for now). |
||||
|
|
||||
|
- Flag handling: Flags are emulated via software, while there may be some funny tricks with the CTR, I'd rather not bother - plus it's widely known that those instructions are not nice on real metal - so I would rather take the i-cache cost. |
||||
|
- 128-bit atomics: No 128-bit atomic support is provided, this may cause wrong or erroneous execution in some contexts. |
||||
|
|
||||
|
To handle endianess differences all 16/32/64-bit loads and stores to the "emulated memory" are byteswapped beforehand. |
||||
@ -0,0 +1,145 @@ |
|||||
|
vabsdub,VX,04,1027 |
||||
|
vabsduh,VX,04,1091 |
||||
|
vabsduw,VX,04,1155 |
||||
|
vaddcuw,VX,04,384 |
||||
|
vaddfp,VX,04,10 |
||||
|
vaddsbs,VX,04,768 |
||||
|
vaddshs,VX,04,832 |
||||
|
vaddsws,VX,04,896 |
||||
|
vaddubm,VX,04,0 |
||||
|
vaddubs,VX,04,512 |
||||
|
vadduhm,VX,04,64 |
||||
|
vadduhs,VX,04,576 |
||||
|
vadduwm,VX,04,128 |
||||
|
vadduws,VX,04,640 |
||||
|
vand,VX,04,1028 |
||||
|
vandc,VX,04,1092 |
||||
|
vavgsb,VX,04,1282 |
||||
|
vavgsh,VX,04,1346 |
||||
|
vavgsw,VX,04,1410 |
||||
|
vavgub,VX,04,1026 |
||||
|
vavguh,VX,04,1090 |
||||
|
vavguw,VX,04,1154 |
||||
|
vcfsx,VDU,04842 |
||||
|
vcfux,VDU,04778 |
||||
|
vcmpbfp,VXR,04,966 |
||||
|
vcmpeqfp,VXR,04,198 |
||||
|
vcmpequb,VXR,04,6 |
||||
|
vcmpequh,VXR,04,70 |
||||
|
vcmpequw,VXR,04,134 |
||||
|
vcmpgefp,VXR,04,454 |
||||
|
vcmpgtfp,VXR,04,710 |
||||
|
vcmpgtsb,VXR,04,774 |
||||
|
vcmpgtsh,VXR,04,838 |
||||
|
vcmpgtsw,VXR,04,902 |
||||
|
vcmpgtub,VXR,04,518 |
||||
|
vcmpgtuh,VXR,04,582 |
||||
|
vcmpgtuw,VXR,04,646 |
||||
|
vctsxs,VDU,04970 |
||||
|
vctuxs,VDU,04906 |
||||
|
vexptefp,VY,04,394 |
||||
|
vlogefp,VY,04,458 |
||||
|
vmaddfp,VXC,46 |
||||
|
vmaxfp,VX,04,1034 |
||||
|
vmaxsb,VX,04,258 |
||||
|
vmaxsh,VX,04,322 |
||||
|
vmaxsw,VX,04,386 |
||||
|
vmaxub,VX,04,2 |
||||
|
vmaxuh,VX,04,66 |
||||
|
vmaxuw,VX,04,130 |
||||
|
vmhaddshs,VXC,32 |
||||
|
vmhraddshs,VXC,33 |
||||
|
vminfp,VX,04,1098 |
||||
|
vminsb,VX,04,770 |
||||
|
vminsh,VX,04,834 |
||||
|
vminsw,VX,04,898 |
||||
|
vminub,VX,04,514 |
||||
|
vminuh,VX,04,578 |
||||
|
vminuw,VX,04,642 |
||||
|
vmladduhm,VXC,34 |
||||
|
vmrghb,VX,04,12 |
||||
|
vmrghh,VX,04,76 |
||||
|
vmrghw,VX,04,140 |
||||
|
vmrglb,VX,04,268 |
||||
|
vmrglh,VX,04,332 |
||||
|
vmrglw,VX,04,396 |
||||
|
vmsummbm,VXC,37 |
||||
|
vmsumshm,VXC,40 |
||||
|
vmsumshs,VXC,41 |
||||
|
vmsumubm,VXC,36 |
||||
|
vmsumuhm,VXC,38 |
||||
|
vmsumuhs,VXC,39 |
||||
|
vmulesb,VX,04,776 |
||||
|
vmulesh,VX,04,840 |
||||
|
vmuleub,VX,04,520 |
||||
|
vmuleuh,VX,04,584 |
||||
|
vmulosb,VX,04,264 |
||||
|
vmulosh,VX,04,328 |
||||
|
vmuloub,VX,04,8 |
||||
|
vmulouh,VX,04,72 |
||||
|
vnmsubfp,VXC,47 |
||||
|
vnor,VX,04,1284 |
||||
|
vor,VX,04,1156 |
||||
|
vperm,VXC,43 |
||||
|
vpkpx,VX,04,782 |
||||
|
vpkshss,VX,04,398 |
||||
|
vpkshus,VX,04,270 |
||||
|
vpkswss,VX,04,462 |
||||
|
vpkswus,VX,04,334 |
||||
|
vpkuhum,VX,04,14 |
||||
|
vpkuhus,VX,04,142 |
||||
|
vpkuwum,VX,04,78 |
||||
|
vpkuwus,VX,04,206 |
||||
|
vrefp,VY,04,266 |
||||
|
vrfim,VY,04,714 |
||||
|
vrfin,VY,04,522 |
||||
|
vrfip,VY,04,650 |
||||
|
vrfiz,VY,04,586 |
||||
|
vrlb,VX,04,4 |
||||
|
vrlh,VX,04,68 |
||||
|
vrlw,VX,04,132 |
||||
|
vrsqrtefp,VY,04,330 |
||||
|
vsel,VXC,42 |
||||
|
vsl,VX,04,452 |
||||
|
vslb,VX,04,260 |
||||
|
vsldoi,VX,04,/ SH 44 |
||||
|
vslh,VX,04,324 |
||||
|
vslo,VX,04,1036 |
||||
|
vslw,VX,04,388 |
||||
|
vspltb,VU,04,524 |
||||
|
vsplth,VU,04,588 |
||||
|
vspltisb,VS,04,780 |
||||
|
vspltish,VS,04,844 |
||||
|
vspltisw,VS,04,908 |
||||
|
vspltw,VSU,04,652 |
||||
|
vsr,VX,04,708 |
||||
|
vsrab,VX,04,772 |
||||
|
vsrah,VX,04,836 |
||||
|
vsraw,VX,04,900 |
||||
|
vsrb,VX,04,516 |
||||
|
vsrh,VX,04,580 |
||||
|
vsro,VX,04,1100 |
||||
|
vsrw,VX,04,644 |
||||
|
vsubcuw,VX,04,1408 |
||||
|
vsubfp,VX,04,74 |
||||
|
vsubsbs,VX,04,1792 |
||||
|
vsubshs,VX,04,1856 |
||||
|
vsubsws,VX,04,1920 |
||||
|
vsububm,VX,04,1024 |
||||
|
vsububs,VX,04,1536 |
||||
|
vsubuhm,VX,04,1088 |
||||
|
vsubuhs,VX,04,1600 |
||||
|
vsubuwm,VX,04,1152 |
||||
|
vsubuws,VX,04,1664 |
||||
|
vsumsws,VX,04,1928 |
||||
|
vsum2sws,VX,04,1672 |
||||
|
vsum4sbs,VX,04,1800 |
||||
|
vsum4shs,VX,04,1608 |
||||
|
vsum4ubs,VX,04,1544 |
||||
|
vupkhpx,VY,04,846 |
||||
|
vupkhsb,VY,04,526 |
||||
|
vupkhsh,VY,04,590 |
||||
|
vupklpx,VY,04,974 |
||||
|
vupklsb,VY,04,654 |
||||
|
vupklsh,VY,04,718 |
||||
|
vxor,VX,04,122 |
||||
@ -0,0 +1,3 @@ |
|||||
|
#!/bin/sh |
||||
|
$CC data2code.c -o data2code && ./data2code data.txt >powah_gen_base.hpp |
||||
|
$CC --target=powerpc64le test.S -c -o test && objdump -SC test |
||||
@ -0,0 +1,222 @@ |
|||||
|
add[o][.],Add,XO,31,266 |
||||
|
addc[o][.],Add Carrying,XO,31,10 |
||||
|
adde[o][.],Add Extended,XO,31,138 |
||||
|
addi,Add Immediate,D,14, |
||||
|
addic,Add Immediate Carrying,D,12, |
||||
|
addic.,Add Immediate Carrying and Record,D,13, |
||||
|
addis,Add Immediate Shifted,D,15, |
||||
|
addme[o][.],Add to Minus One Extended,XO,31,234 |
||||
|
addze[o][.],Add to Zero Extended,XO,31,202 |
||||
|
and[.],AND,X,31,28 |
||||
|
andc[.],AND with Complement,X,31,60 |
||||
|
andi.,AND Immediate,D,28, |
||||
|
andis.,AND Immediate Shifted,D,29, |
||||
|
b[l][a],Branch,I,18, |
||||
|
bc[l][a],Branch Conditional,B,16, |
||||
|
bcctr[l],Branch Conditional to Count Register,XL,19,528 |
||||
|
bclr[l],Branch Conditional Link Register,XL,19,16 |
||||
|
cmp,Compare,X,31,0 |
||||
|
cmpi,Compare Immediate,D,11, |
||||
|
cmpl,Compare Logical,X,31,32 |
||||
|
cmpli,Compare Logical Immediate,D,10, |
||||
|
cntlzd,Count Leading Zeros Doubleword,X,31,58 |
||||
|
cntlzw[.],Count Leading Zeros Word,X,31,26 |
||||
|
crand,Condition Register AND,XL,19,257 |
||||
|
crandc,Condition Register AND with Complement,XL,19,129 |
||||
|
creqv,Condition Register Equivalent,XL,19,289 |
||||
|
crnand,Condition Register NAND,XL,19,225 |
||||
|
crnor,Condition Register NOR,XL,19,33 |
||||
|
cror,Condition Register OR,XL,19,449 |
||||
|
crorc,Condition Register OR with Complement,XL,19,417 |
||||
|
crxor,Condition Register XOR,XL,19,193 |
||||
|
dcbf,Data Cache Block Flush,X,31,86 |
||||
|
dcbi,Data Cache Block Invalidate,X,31,470 |
||||
|
dcbst,Data Cache Block Store,X,31,54 |
||||
|
dcbt,Data Cache Block Touch,X,31,278 |
||||
|
dcbtst,Data Cache Block Touch for Store,X,31,246 |
||||
|
dcbz,Data Cache Block Set to Zero,X,31,1014 |
||||
|
divd,Divide Doubleword,XO,31,489 |
||||
|
divdu,Divide Doubleword Unsigned,XO,31,457 |
||||
|
divw[o][.],Divide Word,XO,31,491 |
||||
|
divwu[o][.],Divide Word Unsigned,XO,31,459 |
||||
|
eciwx,External Control in Word Indexed (opt.),X,31,310 |
||||
|
ecowx,External Control out Word Indexed (opt.),X,31,438 |
||||
|
eieio,Enforce In-order Execution of I/O,X,31,854 |
||||
|
eqv[.],Equivalent,X,31,284 |
||||
|
extsb[.],Extend Sign Byte,X,31,954 |
||||
|
extsh[.],Extend Sign Halfword,XO,31,922 |
||||
|
extsw,Extend Sign Word,X,31,986 |
||||
|
fabs[.],Floating Absolute Value,X,63,264 |
||||
|
fadd[.],Floating Add,A,63,21 |
||||
|
fadds[.],Floating Add Single,A,59,21 |
||||
|
fcfid,Floating Convert from Integer Doubleword,X,63,846 |
||||
|
fcmpo,Floating Compare Ordered,X,63,32 |
||||
|
fcmpu,Floating Compare Unordered,XL,63,0 |
||||
|
fctid,Floating Convert to Integer Doubleword,X,63,814 |
||||
|
fctidz,Floating Convert to Integer Doubleword with Round Toward Zero,X,63,815 |
||||
|
fctiw[.],Floating Convert to Integer Word,X,63,14 |
||||
|
fctiwz[.],Floating Convert to Integer Word with Round to Zero,XL,63,15 |
||||
|
fdiv[.],Floating Divide,A,63,18 |
||||
|
fdivs[.],Floating Divide Single,A,59,18 |
||||
|
fmadd[.],Floating Multiply-Add,A,63,29 |
||||
|
fmadds[.],Floating Multiply-Add Single,A,59,29 |
||||
|
fmr[.],Floating Move Register,X,63,72 |
||||
|
fmsub[.],Floating Multiply-Subtract,A,63,28 |
||||
|
fmsubs[.],Floating Multiply-Subtract Single,A,59,28 |
||||
|
fmul[.],Floating Multiply,A,63,25 |
||||
|
fmuls[.],Floating Multiply Single,A,59,25 |
||||
|
fnabs[.],Floating Negative Absolute Value,X,63,136 |
||||
|
fneg[.],Floating Negate,X,63,40 |
||||
|
fnmadd[.],Floating Negative Multiply-Add,A,63,31 |
||||
|
fnmadds[.],Floating Negative Multiply-Add Single,A,59,31 |
||||
|
fnmsub[.],Floating Negative Multiply-Subtract,A,63,30 |
||||
|
fnmsubs[.],Floating Negative Multiply-Subtract Single,A,59,30 |
||||
|
fres[.],Floating Reciprocal Estimate Single (optional),A,59,24 |
||||
|
frsp[.],Floating Round to Single Precision,X,63,12 |
||||
|
frsqrte[.],Floating Reciprocal Square Root Estimate (optional),A,63,26 |
||||
|
fsel[.],Floating-Point Select (optional),A,63,23 |
||||
|
fsub[.],Floating Subtract,A,63,20 |
||||
|
fsubs[.],Floating Subtract Single,A,59,20 |
||||
|
icbi,Instruction Cache Block Invalidate,X,31,982 |
||||
|
isync,Instruction Synchronize,X,19,150 |
||||
|
lbz,Load Byte and Zero,D,34, |
||||
|
lbzu,Load Byte and Zero with Update,D,35, |
||||
|
lbzux,Load Byte and Zero with Update Indexed,X,31,119 |
||||
|
lbzx,Load Byte and Zero Indexed,X,31,87 |
||||
|
ld,Load Doubleword,DS,58,0 |
||||
|
ldarx,Load Doubleword and Reserve Indexed,X,31,84 |
||||
|
ldu,Load Doubleword with Update,DS,58,1 |
||||
|
ldux,Load Doubleword with Update Indexed,X,31,53 |
||||
|
ldx,Load Doubleword Indexed,X,31,21 |
||||
|
lfd,Load Floating-Point Double,D,50, |
||||
|
lfdu,Load Floating-Point Double with Update,D,51, |
||||
|
lfdux,Load Floating-Point Double with Update Indexed,X,31,631 |
||||
|
lfdx,Load Floating-Point Double Indexed,X,31,599 |
||||
|
lfs,Load Floating-Point Single,D,48, |
||||
|
lfsu,Load Floating-Point Single with Update,D,49, |
||||
|
lfsux,Load Floating-Point Single with Update Indexed,X,31,567 |
||||
|
lfsx,Load Floating-Point Single Indexed,X,31,535 |
||||
|
lha,Load Half Algebraic,D,42, |
||||
|
lhau,Load Half Algebraic with Update,D,43, |
||||
|
lhaux,Load Half Algebraic with Update Indexed,X,31,375 |
||||
|
lhax,Load Half Algebraic Indexed,X,31,343 |
||||
|
lhbrx,Load Half Byte-Reversed Indexed,X,31,790 |
||||
|
lhz,Load Half and Zero,D,40, |
||||
|
lhzu,Load Half and Zero with Update,D,41, |
||||
|
lhzux,Load Half and Zero with Update Indexed,X,31,331 |
||||
|
lhzx,Load Half and Zero Indexed,X,31,279 |
||||
|
lmw,Load Multiple Word,D,46, |
||||
|
lswi,Load String Word Immediate,X,31,597 |
||||
|
lswx,Load String Word Indexed,X,31,533 |
||||
|
lwa,Load Word Algebraic,DS,58,2 |
||||
|
lwarx,Load Word and Reserve Indexed,X,31,20 |
||||
|
lwaux,Load Word Algebraic with Update Indexed,X,31,373 |
||||
|
lwax,Load Word Algebraic Indexed,X,31,341 |
||||
|
lwbrx,Load Word Byte-Reversed Indexed,X,31,534 |
||||
|
lwz,Load Word and Zero,D,32, |
||||
|
lwzu,Load Word with Zero Update,D,33, |
||||
|
lwzux,Load Word and Zero with Update Indexed,X,31,55 |
||||
|
lwzx,Load Word and Zero Indexed,X,31,23 |
||||
|
mcrf,Move Condition Register Field,XL,19,0 |
||||
|
mcrfs,Move to Condition Register from FPSCR,X,63,64 |
||||
|
mcrxr,Move to Condition Register from XER,X,31,512 |
||||
|
mfcr,Move from Condition Register,X,31,19 |
||||
|
mffs[.],Move from FPSCR,X,63,583 |
||||
|
mfmsr,Move from Machine State Register,X,31,83 |
||||
|
mfspr,Move from Special-Purpose Register,X,31,339 |
||||
|
mfsr,Move from Segment Register,X,31,595 |
||||
|
mfsrin,Move from Segment Register Indirect,X,31,659 |
||||
|
mtcrf,Move to Condition Register Fields,XFX,31,144 |
||||
|
mtfsb0[.],Move to FPSCR Bit 0,X,63,70 |
||||
|
mtfsb1[.],Move to FPSCR Bit 1,X,63,38 |
||||
|
mtfsf[.],Move to FPSCR Fields,XFL,63,711 |
||||
|
mtfsfi[.],Move to FPSCR Field Immediate,X,63,134 |
||||
|
mtmsr,Move to Machine State Register,X,31,146 |
||||
|
mtspr,Move to Special-Purpose Register,X,31,467 |
||||
|
mtsr,Move to Segment Register,X,31,210 |
||||
|
mtsrin,Move to Segment Register Indirect,X,31,242 |
||||
|
mulhd,Multiply High Doubleword,XO,31,73 |
||||
|
mulhdu,Multiply High Doubleword Unsigned,XO,31,9 |
||||
|
mulhw[.],Multiply High Word,XO,31,75 |
||||
|
mulhwu[.],Multiply High Word Unsigned,XO,31,11 |
||||
|
mulld,Multiply Low Doubleword,XO,31,233 |
||||
|
mulli,Multiply Low Immediate,D,07, |
||||
|
mullw[o][.],Multiply Low Word,XO,31,235 |
||||
|
nand[.],NAND,X,31,476 |
||||
|
neg[o][.],Negate,XO,31,104 |
||||
|
nor[.],NOR,X,31,124 |
||||
|
or[.],OR,X,31,444 |
||||
|
orc[.],OR with Complement,X,31,412 |
||||
|
ori,OR Immediate,D,24, |
||||
|
oris,OR Immediate Shifted,D,25, |
||||
|
rfi,Return from Interrupt,X,19,50 |
||||
|
rldcl,Rotate Left Doubleword then Clear Left,MDS,30,8 |
||||
|
rldcr,Rotate Left Doubleword then Clear Right,MDS,30,9 |
||||
|
rldic,Rotate Left Doubleword Immediate then Clear,MD,30,2 |
||||
|
rldicl,Rotate Left Doubleword Immediate then Clear Left,MD,30,0 |
||||
|
rldicr,Rotate Left Doubleword Immediate then Clear Right,MD,30,1 |
||||
|
rldimi,Rotate Left Doubleword Immediate then Mask Insert,MD,30,3 |
||||
|
rlwimi[.],Rotate Left Word Immediate then Mask Insert,M,20, |
||||
|
rlwinm[.],Rotate Left Word Immediate then AND with Mask,M,21, |
||||
|
rlwnm[.],Rotate Left Word then AND with Mask,M,23, |
||||
|
sc,System Call,SC,17, |
||||
|
si,Subtract Immediate,D,12, |
||||
|
si.,Subtract Immediate and Record,D,13, |
||||
|
slbia,SLB Invalidate All,X,31,498 |
||||
|
slbie,SLB Invalidate Entry,X,31,434 |
||||
|
sld,Shift Left Doubleword,X,31,27 |
||||
|
slw[.],Shift Left Word,X,31,24 |
||||
|
srad,Shift Right Algebraic Doubleword,X,31,794 |
||||
|
sradi,Shift Right Algebraic Doubleword Immediate,XS,31,413 |
||||
|
srd,Shift Right Doubleword,X,31,539 |
||||
|
sraw[.],Shift Right Algebraic Word,X,31,792 |
||||
|
srawi[.],Shift Right Algebraic Word Immediate,X,31,824 |
||||
|
srw[.],Shift Right Word,X,31,536 |
||||
|
stb,Store Byte,D,38, |
||||
|
stbu,Store Byte with Update,D,39, |
||||
|
stbux,Store Byte with Update Indexed,X,31,247 |
||||
|
stbx,Store Byte Indexed,X,31,215 |
||||
|
std,Store Doubleword,DS,62,0 |
||||
|
stdcx,Store Doubleword Conditional Indexed,X,31,214 |
||||
|
stdu,Store Doubleword with Update,DS,62,1 |
||||
|
stdux,Store Doubleword with Update Indexed,X,31,181 |
||||
|
stdx,Store Doubleword Indexed,X,31,149 |
||||
|
stfd,Store Floating-Point Double,D,54, |
||||
|
stfdu,Store Floating-Point Double with Update,D,55, |
||||
|
stfdux,Store Floating-Point Double with Update Indexed,X,31,759 |
||||
|
stfdx,Store Floating-Point Double Indexed,X,31,727 |
||||
|
stfiwx,Store Floating-Point as Integer Word Indexed (optional),X,31,983 |
||||
|
stfs,Store Floating-Point Single,D,52, |
||||
|
stfsu,Store Floating-Point Single with Update,D,53, |
||||
|
stfsux,Store Floating-Point Single with Update Indexed,X,31,695 |
||||
|
stfsx,Store Floating-Point Single Indexed,X,31,663 |
||||
|
sth,Store Half,D,44, |
||||
|
sthbrx,Store Half Byte-Reverse Indexed,X,31,918 |
||||
|
sthu,Store Half with Update,D,45, |
||||
|
sthux,Store Half with Update Indexed,X,31,439 |
||||
|
sthx,Store Half Indexed,X,31,407 |
||||
|
stmw,Store Multiple Word,D,47, |
||||
|
stswi,Store String Word Immediate,X,31,725 |
||||
|
stswx,Store String Word Indexed,X,31,661 |
||||
|
stw,Store,D,36, |
||||
|
stwbrx,Store Word Byte-Reversed Indexed,X,31,662 |
||||
|
stwcx.,Store Word Conditional Indexed,X,31,150 |
||||
|
stwu,Store Word with Update,D,37, |
||||
|
stwux,Store Word with Update Indexed,X,31,183 |
||||
|
stwx,Store Word Indexed,X,31,151 |
||||
|
subf[o][.],Subtract from,XO,31,40 |
||||
|
subfc[o][.],Subtract from Carrying,XO,31,08 |
||||
|
subfe[o][.],Subtract from Extended,XO,31,136 |
||||
|
subfic,Subtract from Immediate Carrying,D,08, |
||||
|
subfme[o][.],Subtract from Minus One Extended,XO,31,232 |
||||
|
subfze[o][.],Subtract from Zero Extended,XO,31,200 |
||||
|
sync,Synchronize,X,31,598 |
||||
|
td,Trap Doubleword,X,31,68 |
||||
|
tdi,Trap Doubleword Immediate,D,2, |
||||
|
tlbie,Translation Look-aside Buffer Invalidate Entry (optional),X,31,306 |
||||
|
tlbsync,Translation Look-aside Buffer Synchronize (optional),X,31,566 |
||||
|
tw,Trap Word,X,31,04 |
||||
|
twi,Trap Word Immediate,D,03, |
||||
|
xor[.],XOR,X,31,316 |
||||
|
xori,XOR Immediate,D,26, |
||||
|
xoris,XOR Immediate Shift,D,27, |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue