PPC: Teach DynASM to reject r0 for some operands.
This commit is contained in:
parent
32bfececc5
commit
cd6a45760a
@ -246,10 +246,10 @@ local map_op = {
|
|||||||
cmpdi_2 = "2c200000-RI",
|
cmpdi_2 = "2c200000-RI",
|
||||||
addic_3 = "30000000RRI",
|
addic_3 = "30000000RRI",
|
||||||
["addic._3"] = "34000000RRI",
|
["addic._3"] = "34000000RRI",
|
||||||
addi_3 = "38000000RRI",
|
addi_3 = "38000000RR0I",
|
||||||
li_2 = "38000000RI",
|
li_2 = "38000000RI",
|
||||||
la_2 = "38000000RD",
|
la_2 = "38000000RD",
|
||||||
addis_3 = "3c000000RRI",
|
addis_3 = "3c000000RR0I",
|
||||||
lis_2 = "3c000000RI",
|
lis_2 = "3c000000RI",
|
||||||
lus_2 = "3c000000RU",
|
lus_2 = "3c000000RU",
|
||||||
bc_3 = "40000000AAK",
|
bc_3 = "40000000AAK",
|
||||||
@ -340,9 +340,9 @@ local map_op = {
|
|||||||
iseleq_3 = "7c00009eRRR",
|
iseleq_3 = "7c00009eRRR",
|
||||||
mfcr_1 = "7c000026R",
|
mfcr_1 = "7c000026R",
|
||||||
-- NYI: mtcrf, mtocrf, mfocrf
|
-- NYI: mtcrf, mtocrf, mfocrf
|
||||||
lwarx_3 = "7c000028RRR",
|
lwarx_3 = "7c000028RR0R",
|
||||||
ldx_3 = "7c00002aRRR",
|
ldx_3 = "7c00002aRR0R",
|
||||||
lwzx_3 = "7c00002eRRR",
|
lwzx_3 = "7c00002eRR0R",
|
||||||
slw_3 = "7c000030RR~R.",
|
slw_3 = "7c000030RR~R.",
|
||||||
cntlzw_2 = "7c000034RR~",
|
cntlzw_2 = "7c000034RR~",
|
||||||
sld_3 = "7c000036RR~R.",
|
sld_3 = "7c000036RR~R.",
|
||||||
@ -353,63 +353,63 @@ local map_op = {
|
|||||||
cmpld_2 = "7c200040-RR",
|
cmpld_2 = "7c200040-RR",
|
||||||
subf_3 = "7c000050RRR.",
|
subf_3 = "7c000050RRR.",
|
||||||
sub_3 = "7c000050RRR~.",
|
sub_3 = "7c000050RRR~.",
|
||||||
ldux_3 = "7c00006aRRR",
|
ldux_3 = "7c00006aRR0R",
|
||||||
dcbst_2 = "7c00006c-RR",
|
dcbst_2 = "7c00006c-RR",
|
||||||
lwzux_3 = "7c00006eRRR",
|
lwzux_3 = "7c00006eRR0R",
|
||||||
cntlzd_2 = "7c000074RR~",
|
cntlzd_2 = "7c000074RR~",
|
||||||
andc_3 = "7c000078RR~R.",
|
andc_3 = "7c000078RR~R.",
|
||||||
td_3 = "7c000088ARR",
|
td_3 = "7c000088ARR",
|
||||||
mulhd_3 = "7c000092RRR.",
|
mulhd_3 = "7c000092RRR.",
|
||||||
mulhw_3 = "7c000096RRR.",
|
mulhw_3 = "7c000096RRR.",
|
||||||
ldarx_3 = "7c0000a8RRR",
|
ldarx_3 = "7c0000a8RR0R",
|
||||||
dcbf_2 = "7c0000ac-RR",
|
dcbf_2 = "7c0000ac-RR",
|
||||||
lbzx_3 = "7c0000aeRRR",
|
lbzx_3 = "7c0000aeRR0R",
|
||||||
neg_2 = "7c0000d0RR.",
|
neg_2 = "7c0000d0RR.",
|
||||||
lbzux_3 = "7c0000eeRRR",
|
lbzux_3 = "7c0000eeRR0R",
|
||||||
popcntb_2 = "7c0000f4RR~",
|
popcntb_2 = "7c0000f4RR~",
|
||||||
not_2 = "7c0000f8RR~%.",
|
not_2 = "7c0000f8RR~%.",
|
||||||
nor_3 = "7c0000f8RR~R.",
|
nor_3 = "7c0000f8RR~R.",
|
||||||
subfe_3 = "7c000110RRR.",
|
subfe_3 = "7c000110RRR.",
|
||||||
sube_3 = "7c000110RRR~.",
|
sube_3 = "7c000110RRR~.",
|
||||||
adde_3 = "7c000114RRR.",
|
adde_3 = "7c000114RRR.",
|
||||||
stdx_3 = "7c00012aRRR",
|
stdx_3 = "7c00012aRR0R",
|
||||||
stwcx_3 = "7c00012cRRR.",
|
stwcx_3 = "7c00012cRR0R.",
|
||||||
stwx_3 = "7c00012eRRR",
|
stwx_3 = "7c00012eRR0R",
|
||||||
prtyw_2 = "7c000134RR~",
|
prtyw_2 = "7c000134RR~",
|
||||||
stdux_3 = "7c00016aRRR",
|
stdux_3 = "7c00016aRR0R",
|
||||||
stwux_3 = "7c00016eRRR",
|
stwux_3 = "7c00016eRR0R",
|
||||||
prtyd_2 = "7c000174RR~",
|
prtyd_2 = "7c000174RR~",
|
||||||
subfze_2 = "7c000190RR.",
|
subfze_2 = "7c000190RR.",
|
||||||
addze_2 = "7c000194RR.",
|
addze_2 = "7c000194RR.",
|
||||||
stdcx_3 = "7c0001acRRR.",
|
stdcx_3 = "7c0001acRR0R.",
|
||||||
stbx_3 = "7c0001aeRRR",
|
stbx_3 = "7c0001aeRR0R",
|
||||||
subfme_2 = "7c0001d0RR.",
|
subfme_2 = "7c0001d0RR.",
|
||||||
mulld_3 = "7c0001d2RRR.",
|
mulld_3 = "7c0001d2RRR.",
|
||||||
addme_2 = "7c0001d4RR.",
|
addme_2 = "7c0001d4RR.",
|
||||||
mullw_3 = "7c0001d6RRR.",
|
mullw_3 = "7c0001d6RRR.",
|
||||||
dcbtst_2 = "7c0001ec-RR",
|
dcbtst_2 = "7c0001ec-RR",
|
||||||
stbux_3 = "7c0001eeRRR",
|
stbux_3 = "7c0001eeRR0R",
|
||||||
add_3 = "7c000214RRR.",
|
add_3 = "7c000214RRR.",
|
||||||
dcbt_2 = "7c00022c-RR",
|
dcbt_2 = "7c00022c-RR",
|
||||||
lhzx_3 = "7c00022eRRR",
|
lhzx_3 = "7c00022eRR0R",
|
||||||
eqv_3 = "7c000238RR~R.",
|
eqv_3 = "7c000238RR~R.",
|
||||||
eciwx_3 = "7c00026cRRR",
|
eciwx_3 = "7c00026cRR0R",
|
||||||
lhzux_3 = "7c00026eRRR",
|
lhzux_3 = "7c00026eRR0R",
|
||||||
xor_3 = "7c000278RR~R.",
|
xor_3 = "7c000278RR~R.",
|
||||||
mfspefscr_1 = "7c0082a6R",
|
mfspefscr_1 = "7c0082a6R",
|
||||||
mfxer_1 = "7c0102a6R",
|
mfxer_1 = "7c0102a6R",
|
||||||
mflr_1 = "7c0802a6R",
|
mflr_1 = "7c0802a6R",
|
||||||
mfctr_1 = "7c0902a6R",
|
mfctr_1 = "7c0902a6R",
|
||||||
lwax_3 = "7c0002aaRRR",
|
lwax_3 = "7c0002aaRR0R",
|
||||||
lhax_3 = "7c0002aeRRR",
|
lhax_3 = "7c0002aeRR0R",
|
||||||
mftb_1 = "7c0c42e6R",
|
mftb_1 = "7c0c42e6R",
|
||||||
mftbu_1 = "7c0d42e6R",
|
mftbu_1 = "7c0d42e6R",
|
||||||
lwaux_3 = "7c0002eaRRR",
|
lwaux_3 = "7c0002eaRR0R",
|
||||||
lhaux_3 = "7c0002eeRRR",
|
lhaux_3 = "7c0002eeRR0R",
|
||||||
sthx_3 = "7c00032eRRR",
|
sthx_3 = "7c00032eRR0R",
|
||||||
orc_3 = "7c000338RR~R.",
|
orc_3 = "7c000338RR~R.",
|
||||||
ecowx_3 = "7c00036cRRR",
|
ecowx_3 = "7c00036cRR0R",
|
||||||
sthux_3 = "7c00036eRRR",
|
sthux_3 = "7c00036eRR0R",
|
||||||
or_3 = "7c000378RR~R.",
|
or_3 = "7c000378RR~R.",
|
||||||
mr_2 = "7c000378RR~%.",
|
mr_2 = "7c000378RR~%.",
|
||||||
divdu_3 = "7c000392RRR.",
|
divdu_3 = "7c000392RRR.",
|
||||||
@ -427,54 +427,54 @@ local map_op = {
|
|||||||
subfco_3 = "7c000410RRR.",
|
subfco_3 = "7c000410RRR.",
|
||||||
subco_3 = "7c000410RRR~.",
|
subco_3 = "7c000410RRR~.",
|
||||||
addco_3 = "7c000414RRR.",
|
addco_3 = "7c000414RRR.",
|
||||||
ldbrx_3 = "7c000428RRR",
|
ldbrx_3 = "7c000428RR0R",
|
||||||
lswx_3 = "7c00042aRRR",
|
lswx_3 = "7c00042aRR0R",
|
||||||
lwbrx_3 = "7c00042cRRR",
|
lwbrx_3 = "7c00042cRR0R",
|
||||||
lfsx_3 = "7c00042eFRR",
|
lfsx_3 = "7c00042eFR0R",
|
||||||
srw_3 = "7c000430RR~R.",
|
srw_3 = "7c000430RR~R.",
|
||||||
srd_3 = "7c000436RR~R.",
|
srd_3 = "7c000436RR~R.",
|
||||||
subfo_3 = "7c000450RRR.",
|
subfo_3 = "7c000450RRR.",
|
||||||
subo_3 = "7c000450RRR~.",
|
subo_3 = "7c000450RRR~.",
|
||||||
lfsux_3 = "7c00046eFRR",
|
lfsux_3 = "7c00046eFR0R",
|
||||||
lswi_3 = "7c0004aaRRA",
|
lswi_3 = "7c0004aaRR0A",
|
||||||
sync_0 = "7c0004ac",
|
sync_0 = "7c0004ac",
|
||||||
lwsync_0 = "7c2004ac",
|
lwsync_0 = "7c2004ac",
|
||||||
ptesync_0 = "7c4004ac",
|
ptesync_0 = "7c4004ac",
|
||||||
lfdx_3 = "7c0004aeFRR",
|
lfdx_3 = "7c0004aeFR0R",
|
||||||
nego_2 = "7c0004d0RR.",
|
nego_2 = "7c0004d0RR.",
|
||||||
lfdux_3 = "7c0004eeFRR",
|
lfdux_3 = "7c0004eeFR0R",
|
||||||
subfeo_3 = "7c000510RRR.",
|
subfeo_3 = "7c000510RRR.",
|
||||||
subeo_3 = "7c000510RRR~.",
|
subeo_3 = "7c000510RRR~.",
|
||||||
addeo_3 = "7c000514RRR.",
|
addeo_3 = "7c000514RRR.",
|
||||||
stdbrx_3 = "7c000528RRR",
|
stdbrx_3 = "7c000528RR0R",
|
||||||
stswx_3 = "7c00052aRRR",
|
stswx_3 = "7c00052aRR0R",
|
||||||
stwbrx_3 = "7c00052cRRR",
|
stwbrx_3 = "7c00052cRR0R",
|
||||||
stfsx_3 = "7c00052eFRR",
|
stfsx_3 = "7c00052eFR0R",
|
||||||
stfsux_3 = "7c00056eFRR",
|
stfsux_3 = "7c00056eFR0R",
|
||||||
subfzeo_2 = "7c000590RR.",
|
subfzeo_2 = "7c000590RR.",
|
||||||
addzeo_2 = "7c000594RR.",
|
addzeo_2 = "7c000594RR.",
|
||||||
stswi_3 = "7c0005aaRRA",
|
stswi_3 = "7c0005aaRR0A",
|
||||||
stfdx_3 = "7c0005aeFRR",
|
stfdx_3 = "7c0005aeFR0R",
|
||||||
subfmeo_2 = "7c0005d0RR.",
|
subfmeo_2 = "7c0005d0RR.",
|
||||||
mulldo_3 = "7c0005d2RRR.",
|
mulldo_3 = "7c0005d2RRR.",
|
||||||
addmeo_2 = "7c0005d4RR.",
|
addmeo_2 = "7c0005d4RR.",
|
||||||
mullwo_3 = "7c0005d6RRR.",
|
mullwo_3 = "7c0005d6RRR.",
|
||||||
dcba_2 = "7c0005ec-RR",
|
dcba_2 = "7c0005ec-RR",
|
||||||
stfdux_3 = "7c0005eeFRR",
|
stfdux_3 = "7c0005eeFR0R",
|
||||||
addo_3 = "7c000614RRR.",
|
addo_3 = "7c000614RRR.",
|
||||||
lhbrx_3 = "7c00062cRRR",
|
lhbrx_3 = "7c00062cRR0R",
|
||||||
sraw_3 = "7c000630RR~R.",
|
sraw_3 = "7c000630RR~R.",
|
||||||
srad_3 = "7c000634RR~R.",
|
srad_3 = "7c000634RR~R.",
|
||||||
srawi_3 = "7c000670RR~A.",
|
srawi_3 = "7c000670RR~A.",
|
||||||
eieio_0 = "7c0006ac",
|
eieio_0 = "7c0006ac",
|
||||||
lfiwax_3 = "7c0006aeFRR",
|
lfiwax_3 = "7c0006aeFR0R",
|
||||||
sthbrx_3 = "7c00072cRRR",
|
sthbrx_3 = "7c00072cRR0R",
|
||||||
extsh_2 = "7c000734RR~.",
|
extsh_2 = "7c000734RR~.",
|
||||||
extsb_2 = "7c000774RR~.",
|
extsb_2 = "7c000774RR~.",
|
||||||
divduo_3 = "7c000792RRR.",
|
divduo_3 = "7c000792RRR.",
|
||||||
divwou_3 = "7c000796RRR.",
|
divwou_3 = "7c000796RRR.",
|
||||||
icbi_2 = "7c0007ac-RR",
|
icbi_2 = "7c0007ac-RR",
|
||||||
stfiwx_3 = "7c0007aeFRR",
|
stfiwx_3 = "7c0007aeFR0R",
|
||||||
extsw_2 = "7c0007b4RR~.",
|
extsw_2 = "7c0007b4RR~.",
|
||||||
divdo_3 = "7c0007d2RRR.",
|
divdo_3 = "7c0007d2RRR.",
|
||||||
divwo_3 = "7c0007d6RRR.",
|
divwo_3 = "7c0007d6RRR.",
|
||||||
@ -670,31 +670,31 @@ local map_op = {
|
|||||||
efdtstlt_2 = "100002fd-RR",
|
efdtstlt_2 = "100002fd-RR",
|
||||||
efdtsteq_3 = "100002feXRR",
|
efdtsteq_3 = "100002feXRR",
|
||||||
efdtsteq_2 = "100002fe-RR",
|
efdtsteq_2 = "100002fe-RR",
|
||||||
evlddx_3 = "10000300RRR",
|
evlddx_3 = "10000300RR0R",
|
||||||
evldd_2 = "10000301R8",
|
evldd_2 = "10000301R8",
|
||||||
evldwx_3 = "10000302RRR",
|
evldwx_3 = "10000302RR0R",
|
||||||
evldw_2 = "10000303R8",
|
evldw_2 = "10000303R8",
|
||||||
evldhx_3 = "10000304RRR",
|
evldhx_3 = "10000304RR0R",
|
||||||
evldh_2 = "10000305R8",
|
evldh_2 = "10000305R8",
|
||||||
evlwhex_3 = "10000310RRR",
|
evlwhex_3 = "10000310RR0R",
|
||||||
evlwhe_2 = "10000311R4",
|
evlwhe_2 = "10000311R4",
|
||||||
evlwhoux_3 = "10000314RRR",
|
evlwhoux_3 = "10000314RR0R",
|
||||||
evlwhou_2 = "10000315R4",
|
evlwhou_2 = "10000315R4",
|
||||||
evlwhosx_3 = "10000316RRR",
|
evlwhosx_3 = "10000316RR0R",
|
||||||
evlwhos_2 = "10000317R4",
|
evlwhos_2 = "10000317R4",
|
||||||
evstddx_3 = "10000320RRR",
|
evstddx_3 = "10000320RR0R",
|
||||||
evstdd_2 = "10000321R8",
|
evstdd_2 = "10000321R8",
|
||||||
evstdwx_3 = "10000322RRR",
|
evstdwx_3 = "10000322RR0R",
|
||||||
evstdw_2 = "10000323R8",
|
evstdw_2 = "10000323R8",
|
||||||
evstdhx_3 = "10000324RRR",
|
evstdhx_3 = "10000324RR0R",
|
||||||
evstdh_2 = "10000325R8",
|
evstdh_2 = "10000325R8",
|
||||||
evstwhex_3 = "10000330RRR",
|
evstwhex_3 = "10000330RR0R",
|
||||||
evstwhe_2 = "10000331R4",
|
evstwhe_2 = "10000331R4",
|
||||||
evstwhox_3 = "10000334RRR",
|
evstwhox_3 = "10000334RR0R",
|
||||||
evstwho_2 = "10000335R4",
|
evstwho_2 = "10000335R4",
|
||||||
evstwwex_3 = "10000338RRR",
|
evstwwex_3 = "10000338RR0R",
|
||||||
evstwwe_2 = "10000339R4",
|
evstwwe_2 = "10000339R4",
|
||||||
evstwwox_3 = "1000033cRRR",
|
evstwwox_3 = "1000033cRR0R",
|
||||||
evstwwo_2 = "1000033dR4",
|
evstwwo_2 = "1000033dR4",
|
||||||
evmhessf_3 = "10000403RRR",
|
evmhessf_3 = "10000403RRR",
|
||||||
evmhossf_3 = "10000407RRR",
|
evmhossf_3 = "10000407RRR",
|
||||||
@ -743,15 +743,15 @@ local map_op = {
|
|||||||
evmwsmfan_3 = "100005dbRRR",
|
evmwsmfan_3 = "100005dbRRR",
|
||||||
evmergehilo_3 = "1000022eRRR",
|
evmergehilo_3 = "1000022eRRR",
|
||||||
evmergelohi_3 = "1000022fRRR",
|
evmergelohi_3 = "1000022fRRR",
|
||||||
evlhhesplatx_3 = "10000308RRR",
|
evlhhesplatx_3 = "10000308RR0R",
|
||||||
evlhhesplat_2 = "10000309R2",
|
evlhhesplat_2 = "10000309R2",
|
||||||
evlhhousplatx_3 = "1000030cRRR",
|
evlhhousplatx_3 = "1000030cRR0R",
|
||||||
evlhhousplat_2 = "1000030dR2",
|
evlhhousplat_2 = "1000030dR2",
|
||||||
evlhhossplatx_3 = "1000030eRRR",
|
evlhhossplatx_3 = "1000030eRR0R",
|
||||||
evlhhossplat_2 = "1000030fR2",
|
evlhhossplat_2 = "1000030fR2",
|
||||||
evlwwsplatx_3 = "10000318RRR",
|
evlwwsplatx_3 = "10000318RR0R",
|
||||||
evlwwsplat_2 = "10000319R4",
|
evlwwsplat_2 = "10000319R4",
|
||||||
evlwhsplatx_3 = "1000031cRRR",
|
evlwhsplatx_3 = "1000031cRR0R",
|
||||||
evlwhsplat_2 = "1000031dR4",
|
evlwhsplat_2 = "1000031dR4",
|
||||||
evaddusiaaw_2 = "100004c0RR",
|
evaddusiaaw_2 = "100004c0RR",
|
||||||
evaddssiaaw_2 = "100004c1RR",
|
evaddssiaaw_2 = "100004c1RR",
|
||||||
@ -1027,6 +1027,10 @@ map_op[".template__"] = function(params, template, nparams)
|
|||||||
if p == "K" then n = n + 2048 end
|
if p == "K" then n = n + 2048 end
|
||||||
waction("REL_"..mode, n, s, 1)
|
waction("REL_"..mode, n, s, 1)
|
||||||
n = n + 1
|
n = n + 1
|
||||||
|
elseif p == "0" then
|
||||||
|
local mm = 2^rs
|
||||||
|
local t = op % mm
|
||||||
|
if ((op - t) / mm) % 32 == 0 then werror("cannot use r0") end
|
||||||
elseif p == "=" or p == "%" then
|
elseif p == "=" or p == "%" then
|
||||||
local mm = 2^(rs + (p == "%" and 5 or 0))
|
local mm = 2^(rs + (p == "%" and 5 or 0))
|
||||||
local t = ((op - op % mm) / mm) % 32
|
local t = ((op - op % mm) / mm) % 32
|
||||||
|
Loading…
Reference in New Issue
Block a user