mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
PPC: Add SPE instructions to DynASM PowerPC module.
This commit is contained in:
parent
4aa8757aac
commit
1b57266668
@ -248,10 +248,10 @@ local map_op = {
|
|||||||
["addic._3"] = "34000000RRI",
|
["addic._3"] = "34000000RRI",
|
||||||
addi_3 = "38000000RRI",
|
addi_3 = "38000000RRI",
|
||||||
li_2 = "38000000RI",
|
li_2 = "38000000RI",
|
||||||
|
la_2 = "38000000RD",
|
||||||
addis_3 = "3c000000RRI",
|
addis_3 = "3c000000RRI",
|
||||||
lis_2 = "3c000000RI",
|
lis_2 = "3c000000RI",
|
||||||
lus_2 = "3c000000RU",
|
lus_2 = "3c000000RU",
|
||||||
la_2 = "3c000000RD",
|
|
||||||
bc_3 = "40000000AAK",
|
bc_3 = "40000000AAK",
|
||||||
bcl_3 = "40000001AAK",
|
bcl_3 = "40000001AAK",
|
||||||
bdnz_1 = "42000000K",
|
bdnz_1 = "42000000K",
|
||||||
@ -526,6 +526,282 @@ local map_op = {
|
|||||||
fctidz_2 = "fc00065eF-F.",
|
fctidz_2 = "fc00065eF-F.",
|
||||||
fcfid_2 = "fc00069cF-F.",
|
fcfid_2 = "fc00069cF-F.",
|
||||||
|
|
||||||
|
-- Primary opcode 4, SPE APU extension:
|
||||||
|
evaddw_3 = "10000200RRR",
|
||||||
|
evaddiw_3 = "10000202RAR~",
|
||||||
|
evsubw_3 = "10000204RRR~",
|
||||||
|
evsubiw_3 = "10000206RAR~",
|
||||||
|
evabs_2 = "10000208RR",
|
||||||
|
evneg_2 = "10000209RR",
|
||||||
|
evextsb_2 = "1000020aRR",
|
||||||
|
evextsh_2 = "1000020bRR",
|
||||||
|
evrndw_2 = "1000020cRR",
|
||||||
|
evcntlzw_2 = "1000020dRR",
|
||||||
|
evcntlsw_2 = "1000020eRR",
|
||||||
|
brinc_3 = "1000020fRRR",
|
||||||
|
evand_3 = "10000211RRR",
|
||||||
|
evandc_3 = "10000212RRR",
|
||||||
|
evxor_3 = "10000216RRR",
|
||||||
|
evor_3 = "10000217RRR",
|
||||||
|
evmr_2 = "10000217RR=",
|
||||||
|
evnor_3 = "10000218RRR",
|
||||||
|
evnot_2 = "10000218RR=",
|
||||||
|
eveqv_3 = "10000219RRR",
|
||||||
|
evorc_3 = "1000021bRRR",
|
||||||
|
evnand_3 = "1000021eRRR",
|
||||||
|
evsrwu_3 = "10000220RRR",
|
||||||
|
evsrws_3 = "10000221RRR",
|
||||||
|
evsrwiu_3 = "10000222RRA",
|
||||||
|
evsrwis_3 = "10000223RRA",
|
||||||
|
evslw_3 = "10000224RRR",
|
||||||
|
evslwi_3 = "10000226RRA",
|
||||||
|
evrlw_3 = "10000228RRR",
|
||||||
|
evsplati_2 = "10000229RS",
|
||||||
|
evrlwi_3 = "1000022aRRA",
|
||||||
|
evsplatfi_2 = "1000022bRS",
|
||||||
|
evmergehi_3 = "1000022cRRR",
|
||||||
|
evmergelo_3 = "1000022dRRR",
|
||||||
|
evcmpgtu_3 = "10000230XRR",
|
||||||
|
evcmpgtu_2 = "10000230-RR",
|
||||||
|
evcmpgts_3 = "10000231XRR",
|
||||||
|
evcmpgts_2 = "10000231-RR",
|
||||||
|
evcmpltu_3 = "10000232XRR",
|
||||||
|
evcmpltu_2 = "10000232-RR",
|
||||||
|
evcmplts_3 = "10000233XRR",
|
||||||
|
evcmplts_2 = "10000233-RR",
|
||||||
|
evcmpeq_3 = "10000234XRR",
|
||||||
|
evcmpeq_2 = "10000234-RR",
|
||||||
|
evsel_4 = "10000278RRRW",
|
||||||
|
evsel_3 = "10000278RRR",
|
||||||
|
evfsadd_3 = "10000280RRR",
|
||||||
|
evfssub_3 = "10000281RRR",
|
||||||
|
evfsabs_2 = "10000284RR",
|
||||||
|
evfsnabs_2 = "10000285RR",
|
||||||
|
evfsneg_2 = "10000286RR",
|
||||||
|
evfsmul_3 = "10000288RRR",
|
||||||
|
evfsdiv_3 = "10000289RRR",
|
||||||
|
evfscmpgt_3 = "1000028cXRR",
|
||||||
|
evfscmpgt_2 = "1000028c-RR",
|
||||||
|
evfscmplt_3 = "1000028dXRR",
|
||||||
|
evfscmplt_2 = "1000028d-RR",
|
||||||
|
evfscmpeq_3 = "1000028eXRR",
|
||||||
|
evfscmpeq_2 = "1000028e-RR",
|
||||||
|
evfscfui_2 = "10000290R-R",
|
||||||
|
evfscfsi_2 = "10000291R-R",
|
||||||
|
evfscfuf_2 = "10000292R-R",
|
||||||
|
evfscfsf_2 = "10000293R-R",
|
||||||
|
evfsctui_2 = "10000294R-R",
|
||||||
|
evfsctsi_2 = "10000295R-R",
|
||||||
|
evfsctuf_2 = "10000296R-R",
|
||||||
|
evfsctsf_2 = "10000297R-R",
|
||||||
|
evfsctuiz_2 = "10000298R-R",
|
||||||
|
evfsctsiz_2 = "1000029aR-R",
|
||||||
|
evfststgt_3 = "1000029cXRR",
|
||||||
|
evfststgt_2 = "1000029c-RR",
|
||||||
|
evfststlt_3 = "1000029dXRR",
|
||||||
|
evfststlt_2 = "1000029d-RR",
|
||||||
|
evfststeq_3 = "1000029eXRR",
|
||||||
|
evfststeq_2 = "1000029e-RR",
|
||||||
|
efsadd_3 = "100002c0RRR",
|
||||||
|
efssub_3 = "100002c1RRR",
|
||||||
|
efsabs_2 = "100002c4RR",
|
||||||
|
efsnabs_2 = "100002c5RR",
|
||||||
|
efsneg_2 = "100002c6RR",
|
||||||
|
efsmul_3 = "100002c8RRR",
|
||||||
|
efsdiv_3 = "100002c9RRR",
|
||||||
|
efscmpgt_3 = "100002ccXRR",
|
||||||
|
efscmpgt_2 = "100002cc-RR",
|
||||||
|
efscmplt_3 = "100002cdXRR",
|
||||||
|
efscmplt_2 = "100002cd-RR",
|
||||||
|
efscmpeq_3 = "100002ceXRR",
|
||||||
|
efscmpeq_2 = "100002ce-RR",
|
||||||
|
efscfd_2 = "100002cfR-R",
|
||||||
|
efscfui_2 = "100002d0R-R",
|
||||||
|
efscfsi_2 = "100002d1R-R",
|
||||||
|
efscfuf_2 = "100002d2R-R",
|
||||||
|
efscfsf_2 = "100002d3R-R",
|
||||||
|
efsctui_2 = "100002d4R-R",
|
||||||
|
efsctsi_2 = "100002d5R-R",
|
||||||
|
efsctuf_2 = "100002d6R-R",
|
||||||
|
efsctsf_2 = "100002d7R-R",
|
||||||
|
efsctuiz_2 = "100002d8R-R",
|
||||||
|
efsctsiz_2 = "100002daR-R",
|
||||||
|
efststgt_3 = "100002dcXRR",
|
||||||
|
efststgt_2 = "100002dc-RR",
|
||||||
|
efststlt_3 = "100002ddXRR",
|
||||||
|
efststlt_2 = "100002dd-RR",
|
||||||
|
efststeq_3 = "100002deXRR",
|
||||||
|
efststeq_2 = "100002de-RR",
|
||||||
|
efdadd_3 = "100002e0RRR",
|
||||||
|
efdsub_3 = "100002e1RRR",
|
||||||
|
efdcfuid_2 = "100002e2R-R",
|
||||||
|
efdcfsid_2 = "100002e3R-R",
|
||||||
|
efdabs_2 = "100002e4RR",
|
||||||
|
efdnabs_2 = "100002e5RR",
|
||||||
|
efdneg_2 = "100002e6RR",
|
||||||
|
efdmul_3 = "100002e8RRR",
|
||||||
|
efddiv_3 = "100002e9RRR",
|
||||||
|
efdctuidz_2 = "100002eaR-R",
|
||||||
|
efdctsidz_2 = "100002ebR-R",
|
||||||
|
efdcmpgt_3 = "100002ecXRR",
|
||||||
|
efdcmpgt_2 = "100002ec-RR",
|
||||||
|
efdcmplt_3 = "100002edXRR",
|
||||||
|
efdcmplt_2 = "100002ed-RR",
|
||||||
|
efdcmpeq_3 = "100002eeXRR",
|
||||||
|
efdcmpeq_2 = "100002ee-RR",
|
||||||
|
efdcfs_2 = "100002efR-R",
|
||||||
|
efdcfui_2 = "100002f0R-R",
|
||||||
|
efdcfsi_2 = "100002f1R-R",
|
||||||
|
efdcfuf_2 = "100002f2R-R",
|
||||||
|
efdcfsf_2 = "100002f3R-R",
|
||||||
|
efdctui_2 = "100002f4R-R",
|
||||||
|
efdctsi_2 = "100002f5R-R",
|
||||||
|
efdctuf_2 = "100002f6R-R",
|
||||||
|
efdctsf_2 = "100002f7R-R",
|
||||||
|
efdctuiz_2 = "100002f8R-R",
|
||||||
|
efdctsiz_2 = "100002faR-R",
|
||||||
|
efdtstgt_3 = "100002fcXRR",
|
||||||
|
efdtstgt_2 = "100002fc-RR",
|
||||||
|
efdtstlt_3 = "100002fdXRR",
|
||||||
|
efdtstlt_2 = "100002fd-RR",
|
||||||
|
efdtsteq_3 = "100002feXRR",
|
||||||
|
efdtsteq_2 = "100002fe-RR",
|
||||||
|
evlddx_3 = "10000300RRR",
|
||||||
|
evldd_2 = "10000301R8",
|
||||||
|
evldwx_3 = "10000302RRR",
|
||||||
|
evldw_2 = "10000303R8",
|
||||||
|
evldhx_3 = "10000304RRR",
|
||||||
|
evldh_2 = "10000305R8",
|
||||||
|
evlwhex_3 = "10000310RRR",
|
||||||
|
evlwhe_2 = "10000311R4",
|
||||||
|
evlwhoux_3 = "10000314RRR",
|
||||||
|
evlwhou_2 = "10000315R4",
|
||||||
|
evlwhosx_3 = "10000316RRR",
|
||||||
|
evlwhos_2 = "10000317R4",
|
||||||
|
evstddx_3 = "10000320RRR",
|
||||||
|
evstdd_2 = "10000321R8",
|
||||||
|
evstdwx_3 = "10000322RRR",
|
||||||
|
evstdw_2 = "10000323R8",
|
||||||
|
evstdhx_3 = "10000324RRR",
|
||||||
|
evstdh_2 = "10000325R8",
|
||||||
|
evstwhex_3 = "10000330RRR",
|
||||||
|
evstwhe_2 = "10000331R4",
|
||||||
|
evstwhox_3 = "10000334RRR",
|
||||||
|
evstwho_2 = "10000335R4",
|
||||||
|
evstwwex_3 = "10000338RRR",
|
||||||
|
evstwwe_2 = "10000339R4",
|
||||||
|
evstwwox_3 = "1000033cRRR",
|
||||||
|
evstwwo_2 = "1000033dR4",
|
||||||
|
evmhessf_3 = "10000403RRR",
|
||||||
|
evmhossf_3 = "10000407RRR",
|
||||||
|
evmheumi_3 = "10000408RRR",
|
||||||
|
evmhesmi_3 = "10000409RRR",
|
||||||
|
evmhesmf_3 = "1000040bRRR",
|
||||||
|
evmhoumi_3 = "1000040cRRR",
|
||||||
|
evmhosmi_3 = "1000040dRRR",
|
||||||
|
evmhosmf_3 = "1000040fRRR",
|
||||||
|
evmhessfa_3 = "10000423RRR",
|
||||||
|
evmhossfa_3 = "10000427RRR",
|
||||||
|
evmheumia_3 = "10000428RRR",
|
||||||
|
evmhesmia_3 = "10000429RRR",
|
||||||
|
evmhesmfa_3 = "1000042bRRR",
|
||||||
|
evmhoumia_3 = "1000042cRRR",
|
||||||
|
evmhosmia_3 = "1000042dRRR",
|
||||||
|
evmhosmfa_3 = "1000042fRRR",
|
||||||
|
evmwhssf_3 = "10000447RRR",
|
||||||
|
evmwlumi_3 = "10000448RRR",
|
||||||
|
evmwhumi_3 = "1000044cRRR",
|
||||||
|
evmwhsmi_3 = "1000044dRRR",
|
||||||
|
evmwhsmf_3 = "1000044fRRR",
|
||||||
|
evmwssf_3 = "10000453RRR",
|
||||||
|
evmwumi_3 = "10000458RRR",
|
||||||
|
evmwsmi_3 = "10000459RRR",
|
||||||
|
evmwsmf_3 = "1000045bRRR",
|
||||||
|
evmwhssfa_3 = "10000467RRR",
|
||||||
|
evmwlumia_3 = "10000468RRR",
|
||||||
|
evmwhumia_3 = "1000046cRRR",
|
||||||
|
evmwhsmia_3 = "1000046dRRR",
|
||||||
|
evmwhsmfa_3 = "1000046fRRR",
|
||||||
|
evmwssfa_3 = "10000473RRR",
|
||||||
|
evmwumia_3 = "10000478RRR",
|
||||||
|
evmwsmia_3 = "10000479RRR",
|
||||||
|
evmwsmfa_3 = "1000047bRRR",
|
||||||
|
evmra_2 = "100004c4RR",
|
||||||
|
evdivws_3 = "100004c6RRR",
|
||||||
|
evdivwu_3 = "100004c7RRR",
|
||||||
|
evmwssfaa_3 = "10000553RRR",
|
||||||
|
evmwumiaa_3 = "10000558RRR",
|
||||||
|
evmwsmiaa_3 = "10000559RRR",
|
||||||
|
evmwsmfaa_3 = "1000055bRRR",
|
||||||
|
evmwssfan_3 = "100005d3RRR",
|
||||||
|
evmwumian_3 = "100005d8RRR",
|
||||||
|
evmwsmian_3 = "100005d9RRR",
|
||||||
|
evmwsmfan_3 = "100005dbRRR",
|
||||||
|
evmergehilo_3 = "1000022eRRR",
|
||||||
|
evmergelohi_3 = "1000022fRRR",
|
||||||
|
evlhhesplatx_3 = "10000308RRR",
|
||||||
|
evlhhesplat_2 = "10000309R2",
|
||||||
|
evlhhousplatx_3 = "1000030cRRR",
|
||||||
|
evlhhousplat_2 = "1000030dR2",
|
||||||
|
evlhhossplatx_3 = "1000030eRRR",
|
||||||
|
evlhhossplat_2 = "1000030fR2",
|
||||||
|
evlwwsplatx_3 = "10000318RRR",
|
||||||
|
evlwwsplat_2 = "10000319R4",
|
||||||
|
evlwhsplatx_3 = "1000031cRRR",
|
||||||
|
evlwhsplat_2 = "1000031dR4",
|
||||||
|
evaddusiaaw_2 = "100004c0RR",
|
||||||
|
evaddssiaaw_2 = "100004c1RR",
|
||||||
|
evsubfusiaaw_2 = "100004c2RR",
|
||||||
|
evsubfssiaaw_2 = "100004c3RR",
|
||||||
|
evaddumiaaw_2 = "100004c8RR",
|
||||||
|
evaddsmiaaw_2 = "100004c9RR",
|
||||||
|
evsubfumiaaw_2 = "100004caRR",
|
||||||
|
evsubfsmiaaw_2 = "100004cbRR",
|
||||||
|
evmheusiaaw_3 = "10000500RRR",
|
||||||
|
evmhessiaaw_3 = "10000501RRR",
|
||||||
|
evmhessfaaw_3 = "10000503RRR",
|
||||||
|
evmhousiaaw_3 = "10000504RRR",
|
||||||
|
evmhossiaaw_3 = "10000505RRR",
|
||||||
|
evmhossfaaw_3 = "10000507RRR",
|
||||||
|
evmheumiaaw_3 = "10000508RRR",
|
||||||
|
evmhesmiaaw_3 = "10000509RRR",
|
||||||
|
evmhesmfaaw_3 = "1000050bRRR",
|
||||||
|
evmhoumiaaw_3 = "1000050cRRR",
|
||||||
|
evmhosmiaaw_3 = "1000050dRRR",
|
||||||
|
evmhosmfaaw_3 = "1000050fRRR",
|
||||||
|
evmhegumiaa_3 = "10000528RRR",
|
||||||
|
evmhegsmiaa_3 = "10000529RRR",
|
||||||
|
evmhegsmfaa_3 = "1000052bRRR",
|
||||||
|
evmhogumiaa_3 = "1000052cRRR",
|
||||||
|
evmhogsmiaa_3 = "1000052dRRR",
|
||||||
|
evmhogsmfaa_3 = "1000052fRRR",
|
||||||
|
evmwlusiaaw_3 = "10000540RRR",
|
||||||
|
evmwlssiaaw_3 = "10000541RRR",
|
||||||
|
evmwlumiaaw_3 = "10000548RRR",
|
||||||
|
evmwlsmiaaw_3 = "10000549RRR",
|
||||||
|
evmheusianw_3 = "10000580RRR",
|
||||||
|
evmhessianw_3 = "10000581RRR",
|
||||||
|
evmhessfanw_3 = "10000583RRR",
|
||||||
|
evmhousianw_3 = "10000584RRR",
|
||||||
|
evmhossianw_3 = "10000585RRR",
|
||||||
|
evmhossfanw_3 = "10000587RRR",
|
||||||
|
evmheumianw_3 = "10000588RRR",
|
||||||
|
evmhesmianw_3 = "10000589RRR",
|
||||||
|
evmhesmfanw_3 = "1000058bRRR",
|
||||||
|
evmhoumianw_3 = "1000058cRRR",
|
||||||
|
evmhosmianw_3 = "1000058dRRR",
|
||||||
|
evmhosmfanw_3 = "1000058fRRR",
|
||||||
|
evmhegumian_3 = "100005a8RRR",
|
||||||
|
evmhegsmian_3 = "100005a9RRR",
|
||||||
|
evmhegsmfan_3 = "100005abRRR",
|
||||||
|
evmhogumian_3 = "100005acRRR",
|
||||||
|
evmhogsmian_3 = "100005adRRR",
|
||||||
|
evmhogsmfan_3 = "100005afRRR",
|
||||||
|
evmwlusianw_3 = "100005c0RRR",
|
||||||
|
evmwlssianw_3 = "100005c1RRR",
|
||||||
|
evmwlumianw_3 = "100005c8RRR",
|
||||||
|
evmwlsmianw_3 = "100005c9RRR",
|
||||||
|
|
||||||
-- NYI: some 64 bit PowerPC and Book E instructions:
|
-- NYI: some 64 bit PowerPC and Book E instructions:
|
||||||
-- rldicl, rldicr, rldic, rldimi, rldcl, rldcr, sradi, 64 bit ext. add/sub,
|
-- rldicl, rldicr, rldic, rldimi, rldcl, rldcr, sradi, 64 bit ext. add/sub,
|
||||||
-- extended addressing branches, cache management, loads and stores
|
-- extended addressing branches, cache management, loads and stores
|
||||||
@ -720,16 +996,26 @@ map_op[".template__"] = function(params, template, nparams)
|
|||||||
rs = rs - 5; op = op + parse_fpr(params[n]) * 2^rs; n = n + 1
|
rs = rs - 5; op = op + parse_fpr(params[n]) * 2^rs; n = n + 1
|
||||||
elseif p == "A" then
|
elseif p == "A" then
|
||||||
rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, false); n = n + 1
|
rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, false); n = n + 1
|
||||||
|
elseif p == "S" then
|
||||||
|
rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, true); n = n + 1
|
||||||
elseif p == "I" then
|
elseif p == "I" then
|
||||||
op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1
|
op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1
|
||||||
elseif p == "U" then
|
elseif p == "U" then
|
||||||
op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1
|
op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1
|
||||||
elseif p == "D" then
|
elseif p == "D" then
|
||||||
op = op + parse_disp(params[n]); n = n + 1
|
op = op + parse_disp(params[n]); n = n + 1
|
||||||
|
elseif p == "2" then
|
||||||
|
op = op + parse_u5disp(params[n], 1); n = n + 1
|
||||||
|
elseif p == "4" then
|
||||||
|
op = op + parse_u5disp(params[n], 2); n = n + 1
|
||||||
|
elseif p == "8" then
|
||||||
|
op = op + parse_u5disp(params[n], 3); n = n + 1
|
||||||
elseif p == "C" then
|
elseif p == "C" then
|
||||||
rs = rs - 5; op = op + parse_cond(params[n]) * 2^rs; n = n + 1
|
rs = rs - 5; op = op + parse_cond(params[n]) * 2^rs; n = n + 1
|
||||||
elseif p == "X" then
|
elseif p == "X" then
|
||||||
rs = rs - 5; op = op + parse_cr(params[n]) * 2^(rs+2); n = n + 1
|
rs = rs - 5; op = op + parse_cr(params[n]) * 2^(rs+2); n = n + 1
|
||||||
|
elseif p == "W" then
|
||||||
|
op = op + parse_cr(params[n]); n = n + 1
|
||||||
elseif p == "J" or p == "K" then
|
elseif p == "J" or p == "K" then
|
||||||
local mode, n, s = parse_label(params[n], false)
|
local mode, n, s = parse_label(params[n], false)
|
||||||
if p == "K" then n = n + 2048 end
|
if p == "K" then n = n + 2048 end
|
||||||
|
Loading…
Reference in New Issue
Block a user