mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-08 15:34:09 +00:00
Added s390x instructions with their encoding
This commit is contained in:
parent
3288e547bf
commit
9b01b4dc6f
@ -652,311 +652,565 @@ end)
|
|||||||
|
|
||||||
-- Template strings for ARM instructions.
|
-- Template strings for ARM instructions.
|
||||||
map_op = {
|
map_op = {
|
||||||
-- Basic data processing instructions.
|
a = "000000005a000000j",
|
||||||
--add
|
ar = "0000000000001a00g",
|
||||||
ar = "0000000000001a00", --RR
|
ay = "0000e3000000005ak",
|
||||||
ay = "0000e3000000005a", --RXY-a
|
ag = "0000e30000000008k",
|
||||||
ag = "0000e30000000008",
|
agr = "00000000b9080000h",
|
||||||
agr = "00000000b9080000", --RRE
|
agf = "0000e30000000018k",
|
||||||
agf = "0000e30000000018",
|
agfr = "00000000b9180000h",
|
||||||
agfr = "00000000b9180000",
|
axbr = "00000000b34a0000h",
|
||||||
agbr = "00000000b34a0000",
|
adbr = "00000000b31a0000h",
|
||||||
adbr = "00000000b31a0000",
|
aebr = "00000000b30a0000h",
|
||||||
aebr = "00000000b30a0000",
|
ah = "000000004a000000j",
|
||||||
ah = "000000004a000000", --RXa
|
ahy = "0000e3000000007ak",
|
||||||
ahy = "0000e3000000007a",
|
afi = "0000c20900000000l",
|
||||||
afi = "0000c20900000000", --RIL-a --pls check if this is correct
|
agfi = "0000c20800000000l",
|
||||||
agfi = "0000c20800000000",
|
aih = "0000cc0800000000l",
|
||||||
aih = "0000cc0800000000",
|
al = "000000005e000000j",
|
||||||
al = "000000005e000000",
|
alr = "0000000000001e00g",
|
||||||
alr = "0000000000001e00",
|
aly = "0000e3000000005ek",
|
||||||
aly = "0000e3000000005e", -- RXY-a
|
alg = "0000e3000000000ak",
|
||||||
alg = "0000e3000000000a",
|
algr = "00000000b90a0000h",
|
||||||
algr = "00000000b90a0000",
|
algf = "0000e3000000001ak",
|
||||||
algf = "0000e3000000001a",
|
algfr = "00000000b91a0000h",
|
||||||
algfr = "00000000b91a0000",
|
alfi = "0000c20b00000000l",
|
||||||
alfi = "0000c20b00000000",
|
algfi = "0000c20a00000000l",
|
||||||
algfi = "0000c20a00000000",
|
alc = "0000e30000000098k",
|
||||||
alc = "0000e30000000098",
|
alcr = "00000000b9980000h",
|
||||||
alcr = "00000000b9980000", -- RRE
|
alcg = "0000e30000000088k",
|
||||||
alcg = "0000e30000000088",
|
alcgr = "00000000b9880000h",
|
||||||
alcgr = "00000000b9880000",
|
alsih = "0000cc0a00000000l",
|
||||||
alsih = "0000cc0a00000000",
|
alsihn = "0000cc0b00000000l",
|
||||||
alsihn ="0000cc0b00000000",
|
axr = "0000000000003600g",
|
||||||
axr = "0000000000003600", -- RR
|
ad = "000000006a000000j",
|
||||||
ad = "000000006a000000", -- Rx-a
|
adr = "0000000000002a00g",
|
||||||
adr = "0000000000002a00",
|
ae = "000000007a000000j",
|
||||||
ae = "000000007a000000",
|
aer = "0000000000003a00g",
|
||||||
aer = "0000000000003a00",
|
aw = "000000006e000000j",
|
||||||
aw = "000000006e000000",
|
awr = "0000000000002e00g",
|
||||||
awr = "0000000000002e00",
|
au = "000000007e000000j",
|
||||||
au = "000000007e000000",
|
aur = "0000000000003e00g",
|
||||||
aur = "0000000000003e00",
|
n = "0000000054000000j",
|
||||||
|
nr = "0000000000001400g",
|
||||||
-- and
|
ny = "0000e30000000054k",
|
||||||
n = "0000000054000000",
|
ng = "0000e30000000080k",
|
||||||
nr = "0000000000001400",
|
ngr = "00000000b9800000h",
|
||||||
ny = "0000e30000000054", -- RXY-a
|
nihf = "0000c00a00000000l",
|
||||||
ng = "0000e30000000080",
|
nilf = "0000c00b00000000l",
|
||||||
ngr = "00000000b9800000",
|
bal = "0000000045000000j",
|
||||||
nihf = "0000c00a00000000", --RIL-a
|
balr = "000000000000500g",
|
||||||
nihl = "0000c00b00000000",
|
bas = "000000004d000000j",
|
||||||
|
basr = "0000000000000d00g",
|
||||||
--branch related instrcutions
|
bassm = "0000000000000c00g",
|
||||||
bal = "0000000045000000", --RX-a
|
bsa = "00000000b25a0000h",
|
||||||
balr = "0000000000005000", --RR
|
bsm = "0000000000000b00g",
|
||||||
bas = "000000004d000000",
|
bakr = "00000000b2400000h",
|
||||||
basr = "0000000000000d00", -- this has leading zero in the instrcution opcode: 0d, need to take into consideration
|
bsg = "00000000b2580000h",
|
||||||
bassm = "0000000000000c00",
|
bc = "0000000047000000j",
|
||||||
bsm = "0000000000000b00",
|
bcr = "000000000000700g",
|
||||||
bc = "0000000047000000",
|
bct = "0000000046000000j",
|
||||||
bcr = "0000000000000700",
|
bctr = "000000000000600g",
|
||||||
bct = "0000000046000000",
|
bctg = "0000e30000000046k",
|
||||||
bctr = "0000000000000600",
|
bctgr = "00000000b9460000h",
|
||||||
bctg = "0000e30000000046",
|
bxh = "0000000086000000m",
|
||||||
bctgr = "00000000b9460000",
|
bxhg = "0000eb0000000044n",
|
||||||
bxh = "0000000086000000", --RS-a
|
bxle = "0000000087000000m",
|
||||||
bxhg = "0000eb0000000044",
|
bxleg = "0000eb0000000045n",
|
||||||
bxle = "0000000087000000",
|
brasl = "0000c00500000000l",
|
||||||
bxleg = "0000eb0000000045", -- RSY-a
|
brcl = "0000c00400000000l",
|
||||||
--bras = "000000000a750000RI-b",
|
brcth = "0000cc0600000000l",
|
||||||
brasl = "0000c00500000000", --RIL-b
|
cksm = "00000000b2410000h",
|
||||||
--brc = "000000000a740000RI-c",
|
km = "00000000b92e0000h",
|
||||||
brcl = "0000c00400000000", --RIL-c
|
kmf = "00000000b92a0000h",
|
||||||
--brct = "000000000a760000RI-b",
|
kmc = "00000000b92f0000h",
|
||||||
--brctg = "000000000a770000RI-b",
|
kmo = "00000000b92b0000h",
|
||||||
brcth = "0000cc0600000000",
|
c = "0000000059000000j",
|
||||||
--brxh = "0000000000840000RSI",
|
cr = "0000000000001900g",
|
||||||
--brxhg = "00000000ec440000RIE-e",
|
cy = "0000e30000000059k",
|
||||||
--brxle = "0000000000850000RSI",
|
cg = "0000e30000000020k",
|
||||||
--brxlg = "00000000ec450000RIE-e",
|
cgr = "00000000b9200000h",
|
||||||
|
cgf = "0000e30000000030k",
|
||||||
----subtraction (basic operation)
|
cgfr = "00000000b9300000h",
|
||||||
sub = "00000000005b0000RX-a"
|
cxbr = "00000000b3490000h",
|
||||||
sr = "00000000001b0000RR"
|
cxtr = "00000000b3ec0000h",
|
||||||
srk = "00000000b9f90000RRF-a"
|
cxr = "00000000b3690000h",
|
||||||
sy = "00000000e35b0000RXY-a"
|
cdbr = "00000000b3190000h",
|
||||||
sg = "00000000e3090000RXY-a"
|
cdtr = "00000000b3e40000h",
|
||||||
sgr = "00000000b9090000RRE"
|
cd = "0000000069000000j",
|
||||||
sgrk = "00000000b9e90000RRF-a"
|
cdr = "0000000000002900g",
|
||||||
sgf = "00000000e3190000RXY-a"
|
cebr = "00000000b3090000h",
|
||||||
sgfr = "00000000b9190000RRE"
|
ce = "0000000079000000j",
|
||||||
sh = "00000000004b0000RX-a"
|
cer = "0000000000003900g",
|
||||||
shy = "00000000e37b0000RXY-a"
|
kxbr = "00000000b3480000h",
|
||||||
shhhr = "00000000b9c90000RRF-a"
|
kxtr = "00000000b3e80000h",
|
||||||
shhlr = "00000000b9d90000RX-a"
|
kdbr = "00000000b3180000h",
|
||||||
sl = "00000000005f0000RX-a"
|
kdtr = "00000000b3e00000h",
|
||||||
slr = "00000000001f0000RR"
|
kebr = "00000000b3080000h",
|
||||||
slrk = "00000000b9f80000RR"
|
cs = "00000000ba000000m",
|
||||||
sly = "00000000e35f0000RXY-a",
|
csy = "0000eb0000000014n",
|
||||||
slg = "00000000e30b0000RXY-a",
|
csg = "0000eb0000000030n",
|
||||||
slgr = "00000000b9080000RRE",
|
csp = "00000000b2500000h",
|
||||||
slgrk = "00000000b9eb0000RRF-a",
|
cspg = "00000000b98a0000h",
|
||||||
slgf = "00000000e3180000RXY-a",
|
cextr = "00000000b3fc0000h",
|
||||||
slgfr = "00000000b91b0000RRE",
|
cedtr = "00000000b3f40000h",
|
||||||
slhhhr = "00000000b9cb0000RRF-a",
|
cds = "00000000bb000000m",
|
||||||
slhhlr = "00000000b9db0000RRF-a",
|
cdsy = "0000eb0000000031n",
|
||||||
slfi = "000000000c250000RIL-a",
|
cdsg = "0000eb000000003en",
|
||||||
slgfi = "000000000c240000RIL-a",
|
ch = "0000000049000000j",
|
||||||
slb = "00000000e3990000RXY-a",
|
chy = "0000e30000000079k",
|
||||||
slbr = "00000000b9990000RRE" ,
|
cgh = "0000e30000000034k",
|
||||||
slbg = "00000000e3890000RXY-a",
|
chrl = "0000c60500000000l",
|
||||||
slbgr = "00000000b9890000RXY-a",
|
cghrl = "0000c60400000000l",
|
||||||
|
chf = "0000e300000000cdk",
|
||||||
cmp_2 = "0000000000590000RX-a|0000000000190000RR|00000000e3590000RXY-a",
|
chhr = "00000000b9cd0000h",
|
||||||
cmp_3 = "00000000e3200000RXY-a|00000000b9200000RRE|00000000e3300000RXY-a| 00000000b9300000RRE",
|
chlr = "00000000b9dd0000h",
|
||||||
|
cfi = "0000c20d00000000l",
|
||||||
div_2 = "00000000005d0000RX-a|00000000001d0000RR|00000000e3970000RXY-a|00000000b9970000RRE",
|
cgfi = "0000c20c00000000l",
|
||||||
div_3 ="00000000e3870000RXY-a|00000000b9870000RRE",
|
cih = "0000cc0d00000000l",
|
||||||
div_sing ="00000000e30d0000RXY-a|00000000b90d0000RRE|00000000e31d0000RXY-a|00000000b91d0000RRE",
|
cl = "0000000055000000j",
|
||||||
|
clr = "0000000000001500g",
|
||||||
eor_2 = "0000000000570000RX-a|0000000000170000RR|00000000b9f70000RRF-a|00000000e3570000RXY-a",
|
cly = "0000e30000000055k",
|
||||||
eor_3 = "00000000e3820000RXY-a|00000000b9820000RRE|00000000b9e70000RRF-a|
|
clg = "0000e30000000021k",
|
||||||
eor_c = "0000000000d70000SS-a",
|
clgr = "00000000b9210000h",
|
||||||
eor_i = "0000000000970000SI| 00000000eb570000|000000000c060000a|000000000c070000RIL-a",
|
clgf = "0000e30000000031k",
|
||||||
|
clgfr = "00000000b9310000h",
|
||||||
-- load instruction to be added and the following instructions need to be changed (are not s390x related)
|
clmh = "0000eb0000000020n",
|
||||||
|
clm = "00000000bd000000m",
|
||||||
neg_2 = "4b0003e0DMg",
|
clmy = "0000eb0000000021n",
|
||||||
neg_3 = "4b0003e0DMSg",
|
clhf = "0000e300000000cfk",
|
||||||
negs_2 = "6b0003e0DMg",
|
clhhr = "00000000b9cf0000h",
|
||||||
negs_3 = "6b0003e0DMSg",
|
clhlr = "00000000b9df0000h",
|
||||||
adc_3 = "1a000000DNMg",
|
clfi = "0000c20f00000000l",
|
||||||
adcs_3 = "3a000000DNMg",
|
clgfi = "0000c20e00000000l",
|
||||||
sbc_3 = "5a000000DNMg",
|
clih = "0000cc0f00000000l",
|
||||||
sbcs_3 = "7a000000DNMg",
|
clcl = "0000000000000f00g",
|
||||||
ngc_2 = "5a0003e0DMg",
|
clcle = "00000000a9000000m",
|
||||||
ngcs_2 = "7a0003e0DMg",
|
clclu = "0000eb000000008fn",
|
||||||
and_3 = "0a000000DNMg|12000000pDNig",
|
clrl = "0000c60f00000000l",
|
||||||
and_4 = "0a000000DNMSg",
|
clhrl = "0000c60700000000l",
|
||||||
orr_3 = "2a000000DNMg|32000000pDNig",
|
clgrl = "0000c60a00000000l",
|
||||||
orr_4 = "2a000000DNMSg",
|
clghrl = "0000c60600000000l",
|
||||||
eor_3 = "4a000000DNMg|52000000pDNig",
|
clgfrl = "0000c60e00000000l",
|
||||||
eor_4 = "4a000000DNMSg",
|
clst = "00000000b25d0000h",
|
||||||
ands_3 = "6a000000DNMg|72000000DNig",
|
crl = "0000c60d00000000l",
|
||||||
ands_4 = "6a000000DNMSg",
|
cgrl = "0000c60800000000l",
|
||||||
tst_2 = "6a00001fNMg|7200001fNig",
|
cgfrl = "0000c60c00000000l",
|
||||||
tst_3 = "6a00001fNMSg",
|
cuse = "00000000b2570000h",
|
||||||
bic_3 = "0a200000DNMg",
|
cmpsc = "00000000b2630000h",
|
||||||
bic_4 = "0a200000DNMSg",
|
kimd = "00000000b93e0000h",
|
||||||
orn_3 = "2a200000DNMg",
|
klmd = "00000000b93f0000h",
|
||||||
orn_4 = "2a200000DNMSg",
|
kmac = "00000000b91e0000h",
|
||||||
eon_3 = "4a200000DNMg",
|
thdr = "00000000b3590000h",
|
||||||
eon_4 = "4a200000DNMSg",
|
thder = "00000000b3580000h",
|
||||||
bics_3 = "6a200000DNMg",
|
cxfbr = "00000000b3960000h",
|
||||||
bics_4 = "6a200000DNMSg",
|
cxftr = "00000000b9590000h",
|
||||||
movn_2 = "12800000DWg",
|
cxfr = "00000000b3b60000h",
|
||||||
movn_3 = "12800000DWRg",
|
cdfbr = "00000000b3950000h",
|
||||||
movz_2 = "52800000DWg",
|
cdftr = "00000000b9510000h",
|
||||||
movz_3 = "52800000DWRg",
|
cdfr = "00000000b3b50000h",
|
||||||
movk_2 = "72800000DWg",
|
cefbr = "00000000b3940000h",
|
||||||
movk_3 = "72800000DWRg",
|
cefr = "00000000b3b40000h",
|
||||||
-- TODO: this doesn't cover all valid immediates for mov reg, #imm.
|
cxgbr = "00000000b3a60000h",
|
||||||
mov_2 = "2a0003e0DMg|52800000DW|320003e0pDig|11000000pDpNg",
|
cxgtr = "00000000b3f90000h",
|
||||||
mov_3 = "2a0003e0DMSg",
|
cxgr = "00000000b3c60000h",
|
||||||
mvn_2 = "2a2003e0DMg",
|
cdgbr = "00000000b3a50000h",
|
||||||
mvn_3 = "2a2003e0DMSg",
|
cdgtr = "00000000b3f10000h",
|
||||||
adr_2 = "10000000DBx",
|
cdgr = "00000000b3c50000h",
|
||||||
adrp_2 = "90000000DBx",
|
cegbr = "00000000b3a40000h",
|
||||||
csel_4 = "1a800000DNMCg",
|
cegr = "00000000b3c40000h",
|
||||||
csinc_4 = "1a800400DNMCg",
|
cxstr = "00000000b3fb0000h",
|
||||||
csinv_4 = "5a800000DNMCg",
|
cdstr = "00000000b3f30000h",
|
||||||
csneg_4 = "5a800400DNMCg",
|
cxutr = "00000000b3fa0000h",
|
||||||
cset_2 = "1a9f07e0Dcg",
|
cdutr = "00000000b3f20000h",
|
||||||
csetm_2 = "5a9f03e0Dcg",
|
cvb = "000000004f000000j",
|
||||||
cinc_3 = "1a800400DNmcg",
|
cvby = "0000e30000000006k",
|
||||||
cinv_3 = "5a800000DNmcg",
|
cvbg = "0000e3000000000ek",
|
||||||
cneg_3 = "5a800400DNmcg",
|
cvd = "000000004e000000j",
|
||||||
ccmn_4 = "3a400000NMVCg|3a400800N5VCg",
|
cvdy = "0000e30000000026k",
|
||||||
ccmp_4 = "7a400000NMVCg|7a400800N5VCg",
|
cvdg = "0000e3000000002ek",
|
||||||
madd_4 = "1b000000DNMAg",
|
cuxtr = "00000000b3ea0000h",
|
||||||
msub_4 = "1b008000DNMAg",
|
cudtr = "00000000b3e20000h",
|
||||||
mul_3 = "1b007c00DNMg",
|
cu42 = "00000000b9b30000h",
|
||||||
mneg_3 = "1b00fc00DNMg",
|
cu41 = "00000000b9b20000h",
|
||||||
smaddl_4 = "9b200000DxNMwAx",
|
cpya = "00000000b24d0000h",
|
||||||
smsubl_4 = "9b208000DxNMwAx",
|
d = "000000005d000000j",
|
||||||
smull_3 = "9b207c00DxNMw",
|
dr = "0000000000001d00g",
|
||||||
smnegl_3 = "9b20fc00DxNMw",
|
dxbr = "00000000b34d0000h",
|
||||||
smulh_3 = "9b407c00DNMx",
|
dxr = "00000000b22d0000h",
|
||||||
umaddl_4 = "9ba00000DxNMwAx",
|
ddbr = "00000000b31d0000h",
|
||||||
umsubl_4 = "9ba08000DxNMwAx",
|
dd = "000000006d000000j",
|
||||||
umull_3 = "9ba07c00DxNMw",
|
ddr = "0000000000002d00g",
|
||||||
umnegl_3 = "9ba0fc00DxNMw",
|
debr = "00000000b30d0000h",
|
||||||
umulh_3 = "9bc07c00DNMx",
|
de = "000000007d000000j",
|
||||||
udiv_3 = "1ac00800DNMg",
|
der = "0000000000003d00g",
|
||||||
sdiv_3 = "1ac00c00DNMg",
|
dl = "0000e30000000097k",
|
||||||
-- Bit operations.
|
dlr = "00000000b9970000h",
|
||||||
sbfm_4 = "13000000DN12w|93400000DN12x",
|
dlg = "0000e30000000087k",
|
||||||
bfm_4 = "33000000DN12w|b3400000DN12x",
|
dlgr = "00000000b9870000h",
|
||||||
ubfm_4 = "53000000DN12w|d3400000DN12x",
|
dsg = "0000e3000000000dk",
|
||||||
extr_4 = "13800000DNM2w|93c00000DNM2x",
|
dsgr = "00000000b90d0000h",
|
||||||
sxtb_2 = "13001c00DNw|93401c00DNx",
|
dsgf = "0000e3000000001dk",
|
||||||
sxth_2 = "13003c00DNw|93403c00DNx",
|
dsgfr = "00000000b91d0000h",
|
||||||
sxtw_2 = "93407c00DxNw",
|
x = "0000000057000000j",
|
||||||
uxtb_2 = "53001c00DNw",
|
xr = "0000000000001700g",
|
||||||
uxth_2 = "53003c00DNw",
|
xy = "0000e30000000057k",
|
||||||
sbfx_4 = op_alias("sbfm_4", alias_bfx),
|
xg = "0000e30000000082k",
|
||||||
bfxil_4 = op_alias("bfm_4", alias_bfx),
|
xgr = "00000000b9820000h",
|
||||||
ubfx_4 = op_alias("ubfm_4", alias_bfx),
|
xihf = "0000c00600000000l",
|
||||||
sbfiz_4 = op_alias("sbfm_4", alias_bfiz),
|
xilf = "0000c00700000000l",
|
||||||
bfi_4 = op_alias("bfm_4", alias_bfiz),
|
ex = "0000000044000000j",
|
||||||
ubfiz_4 = op_alias("ubfm_4", alias_bfiz),
|
exrl = "0000c60000000000l",
|
||||||
lsl_3 = function(params, nparams)
|
ear = "00000000b24f0000h",
|
||||||
if params and params[3]:byte() == 35 then
|
esea = "00000000b99d0000h",
|
||||||
return alias_lslimm(params, nparams)
|
eextr = "00000000b3ed0000h",
|
||||||
else
|
eedtr = "00000000b3e50000h",
|
||||||
return op_template(params, "1ac02000DNMg", nparams)
|
ecag = "0000eb000000004cn",
|
||||||
end
|
efpc = "00000000b38c0000h",
|
||||||
end,
|
epar = "00000000b2260000h",
|
||||||
lsr_3 = "1ac02400DNMg|53007c00DN1w|d340fc00DN1x",
|
epair = "00000000b99a0000h",
|
||||||
asr_3 = "1ac02800DNMg|13007c00DN1w|9340fc00DN1x",
|
epsw = "00000000b98d0000h",
|
||||||
ror_3 = "1ac02c00DNMg|13800000DNm2w|93c00000DNm2x",
|
esar = "00000000b2270000h",
|
||||||
clz_2 = "5ac01000DNg",
|
esair = "00000000b99b0000h",
|
||||||
cls_2 = "5ac01400DNg",
|
esxtr = "00000000b3ef0000h",
|
||||||
rbit_2 = "5ac00000DNg",
|
esdtr = "00000000b3e70000h",
|
||||||
rev_2 = "5ac00800DNw|dac00c00DNx",
|
ereg = "00000000b2490000h",
|
||||||
rev16_2 = "5ac00400DNg",
|
eregg = "00000000b90e0000h",
|
||||||
rev32_2 = "dac00800DNx",
|
esta = "00000000b24a0000h",
|
||||||
-- Loads and stores.
|
flogr = "00000000b9830000h",
|
||||||
["strb_*"] = "38000000DwL",
|
hdr = "0000000000002400g",
|
||||||
["ldrb_*"] = "38400000DwL",
|
her = "0000000000003400g",
|
||||||
["ldrsb_*"] = "38c00000DwL|38800000DxL",
|
iac = "00000000b2240000h",
|
||||||
["strh_*"] = "78000000DwL",
|
ic = "0000000043000000j",
|
||||||
["ldrh_*"] = "78400000DwL",
|
icy = "0000e30000000073k",
|
||||||
["ldrsh_*"] = "78c00000DwL|78800000DxL",
|
icmh = "0000eb0000000080n",
|
||||||
["str_*"] = "b8000000DwL|f8000000DxL|bc000000DsL|fc000000DdL",
|
icm = "00000000bf000000m",
|
||||||
["ldr_*"] = "18000000DwB|58000000DxB|1c000000DsB|5c000000DdB|b8400000DwL|f8400000DxL|bc400000DsL|fc400000DdL",
|
icmy = "0000eb0000000081n",
|
||||||
["ldrsw_*"] = "98000000DxB|b8800000DxL",
|
iihf = "0000c00800000000l",
|
||||||
-- NOTE: ldur etc. are handled by ldr et al.
|
iilf = "0000c00900000000l",
|
||||||
["stp_*"] = "28000000DAwP|a8000000DAxP|2c000000DAsP|6c000000DAdP",
|
ipm = "00000000b2220000h",
|
||||||
["ldp_*"] = "28400000DAwP|a8400000DAxP|2c400000DAsP|6c400000DAdP",
|
iske = "00000000b2290000h",
|
||||||
["ldpsw_*"] = "68400000DAxP",
|
ivsk = "00000000b2230000h",
|
||||||
-- Branches.
|
l = "0000000058000000j",
|
||||||
b_1 = "14000000B",
|
lr = "0000000000001800g",
|
||||||
bl_1 = "94000000B",
|
ly = "0000e30000000058k",
|
||||||
blr_1 = "d63f0000Nx",
|
lg = "0000e30000000004k",
|
||||||
br_1 = "d61f0000Nx",
|
lgr = "00000000b9040000h",
|
||||||
ret_0 = "d65f03c0",
|
lgf = "0000e30000000014k",
|
||||||
ret_1 = "d65f0000Nx",
|
lgfr = "00000000b9140000h",
|
||||||
-- b.cond is added below.
|
lxr = "00000000b3650000h",
|
||||||
cbz_2 = "34000000DBg",
|
ld = "0000000068000000j",
|
||||||
cbnz_2 = "35000000DBg",
|
ldr = "0000000000002800g",
|
||||||
tbz_3 = "36000000DTBw|36000000DTBx",
|
ldy = "0000ed0000000065k",
|
||||||
tbnz_3 = "37000000DTBw|37000000DTBx",
|
le = "0000000078000000j",
|
||||||
-- Miscellaneous instructions.
|
ler = "0000000000003800g",
|
||||||
-- TODO: hlt, hvc, smc, svc, eret, dcps[123], drps, mrs, msr
|
ley = "0000ed0000000064k",
|
||||||
-- TODO: sys, sysl, ic, dc, at, tlbi
|
lam = "000000009a000000m",
|
||||||
-- TODO: hint, yield, wfe, wfi, sev, sevl
|
lamy = "0000eb000000009an",
|
||||||
-- TODO: clrex, dsb, dmb, isb
|
la = "0000000041000000j",
|
||||||
nop_0 = "d503201f",
|
lay = "0000e30000000071k",
|
||||||
brk_0 = "d4200000",
|
lae = "0000000051000000j",
|
||||||
brk_1 = "d4200000W",
|
laey = "0000e30000000075k",
|
||||||
-- Floating point instructions.
|
larl = "0000c00000000000l",
|
||||||
fmov_2 = "1e204000DNf|1e260000DwNs|1e270000DsNw|9e660000DxNd|9e670000DdNx|1e201000DFf",
|
laa = "0000eb00000000f8n",
|
||||||
fabs_2 = "1e20c000DNf",
|
laag = "0000eb00000000e8n",
|
||||||
fneg_2 = "1e214000DNf",
|
laal = "0000eb00000000fan",
|
||||||
fsqrt_2 = "1e21c000DNf",
|
laalg = "0000eb00000000ean",
|
||||||
fcvt_2 = "1e22c000DdNs|1e624000DsNd",
|
lan = "0000eb00000000f4n",
|
||||||
-- TODO: half-precision and fixed-point conversions.
|
lang = "0000eb00000000e4n",
|
||||||
fcvtas_2 = "1e240000DwNs|9e240000DxNs|1e640000DwNd|9e640000DxNd",
|
lax = "0000eb00000000f7n",
|
||||||
fcvtau_2 = "1e250000DwNs|9e250000DxNs|1e650000DwNd|9e650000DxNd",
|
laxg = "0000eb00000000e7n",
|
||||||
fcvtms_2 = "1e300000DwNs|9e300000DxNs|1e700000DwNd|9e700000DxNd",
|
lao = "0000eb00000000f6n",
|
||||||
fcvtmu_2 = "1e310000DwNs|9e310000DxNs|1e710000DwNd|9e710000DxNd",
|
laog = "0000eb00000000e6n",
|
||||||
fcvtns_2 = "1e200000DwNs|9e200000DxNs|1e600000DwNd|9e600000DxNd",
|
lt = "0000e30000000012k",
|
||||||
fcvtnu_2 = "1e210000DwNs|9e210000DxNs|1e610000DwNd|9e610000DxNd",
|
ltr = "0000000000001200g",
|
||||||
fcvtps_2 = "1e280000DwNs|9e280000DxNs|1e680000DwNd|9e680000DxNd",
|
ltg = "0000e30000000002k",
|
||||||
fcvtpu_2 = "1e290000DwNs|9e290000DxNs|1e690000DwNd|9e690000DxNd",
|
ltgr = "00000000b9020000h",
|
||||||
fcvtzs_2 = "1e380000DwNs|9e380000DxNs|1e780000DwNd|9e780000DxNd",
|
ltgf = "0000e30000000032k",
|
||||||
fcvtzu_2 = "1e390000DwNs|9e390000DxNs|1e790000DwNd|9e790000DxNd",
|
ltgfr = "00000000b9120000h",
|
||||||
scvtf_2 = "1e220000DsNw|9e220000DsNx|1e620000DdNw|9e620000DdNx",
|
ltxbr = "00000000b3420000h",
|
||||||
ucvtf_2 = "1e230000DsNw|9e230000DsNx|1e630000DdNw|9e630000DdNx",
|
ltxtr = "00000000b3de0000h",
|
||||||
frintn_2 = "1e244000DNf",
|
ltxr = "00000000b3620000h",
|
||||||
frintp_2 = "1e24c000DNf",
|
ltdbr = "00000000b3120000h",
|
||||||
frintm_2 = "1e254000DNf",
|
ltdtr = "00000000b3d60000h",
|
||||||
frintz_2 = "1e25c000DNf",
|
ltdr = "0000000000002200g",
|
||||||
frinta_2 = "1e264000DNf",
|
ltebr = "00000000b3020000h",
|
||||||
frintx_2 = "1e274000DNf",
|
lter = "0000000000003200g",
|
||||||
frinti_2 = "1e27c000DNf",
|
lb = "0000e30000000076k",
|
||||||
fadd_3 = "1e202800DNMf",
|
lbr = "00000000b9260000h",
|
||||||
fsub_3 = "1e203800DNMf",
|
lgb = "0000e30000000077k",
|
||||||
fmul_3 = "1e200800DNMf",
|
lgbr = "00000000b9060000h",
|
||||||
fnmul_3 = "1e208800DNMf",
|
lbh = "0000e300000000c0k",
|
||||||
fdiv_3 = "1e201800DNMf",
|
lcr = "0000000000001300g",
|
||||||
fmadd_4 = "1f000000DNMAf",
|
lcgr = "00000000b9030000h",
|
||||||
fmsub_4 = "1f008000DNMAf",
|
lcgfr = "00000000b9130000h",
|
||||||
fnmadd_4 = "1f200000DNMAf",
|
lcxbr = "00000000b3430000h",
|
||||||
fnmsub_4 = "1f208000DNMAf",
|
lcxr = "00000000b3630000h",
|
||||||
fmax_3 = "1e204800DNMf",
|
lcdbr = "00000000b3130000h",
|
||||||
fmaxnm_3 = "1e206800DNMf",
|
lcdr = "0000000000002300g",
|
||||||
fmin_3 = "1e205800DNMf",
|
lcdfr = "00000000b3730000h",
|
||||||
fminnm_3 = "1e207800DNMf",
|
lcebr = "00000000b3030000h",
|
||||||
fcmp_2 = "1e202000NMf|1e202008NZf",
|
lcer = "0000000000003300g",
|
||||||
fcmpe_2 = "1e202010NMf|1e202018NZf",
|
lctl = "00000000b7000000m",
|
||||||
fccmp_4 = "1e200400NMVCf",
|
lctlg = "0000eb000000002fn",
|
||||||
fccmpe_4 = "1e200410NMVCf",
|
fixr = "00000000b3670000h",
|
||||||
fcsel_4 = "1e200c00DNMCf",
|
fidr = "00000000b37f0000h",
|
||||||
-- TODO: crc32*, aes*, sha*, pmull
|
fier = "00000000b3770000h",
|
||||||
-- TODO: SIMD instructions.
|
ldgr = "00000000b3c10000h",
|
||||||
|
lgdr = "00000000b3cd0000h",
|
||||||
|
lh = "0000000048000000j",
|
||||||
|
lhr = "00000000b9270000h",
|
||||||
|
lhy = "0000e30000000078k",
|
||||||
|
lgh = "0000e30000000015k",
|
||||||
|
lghr = "00000000b9070000h",
|
||||||
|
lhh = "0000e300000000c4k",
|
||||||
|
lhrl = "0000c40500000000l",
|
||||||
|
lghrl = "0000c40400000000l",
|
||||||
|
lfh = "0000e300000000cak",
|
||||||
|
lgfi = "0000c00100000000l",
|
||||||
|
lxdbr = "00000000b3050000h",
|
||||||
|
lxdr = "00000000b3250000h",
|
||||||
|
lxebr = "00000000b3060000h",
|
||||||
|
lxer = "00000000b3260000h",
|
||||||
|
ldebr = "00000000b3040000h",
|
||||||
|
lder = "00000000b3240000h",
|
||||||
|
llgf = "0000e30000000016k",
|
||||||
|
llgfr = "00000000b9160000h",
|
||||||
|
llc = "0000e30000000094k",
|
||||||
|
llcr = "00000000b9940000h",
|
||||||
|
llgc = "0000e30000000090k",
|
||||||
|
llgcr = "00000000b9840000h",
|
||||||
|
llch = "0000e300000000c2k",
|
||||||
|
llh = "0000e30000000095k",
|
||||||
|
llhr = "00000000b9950000h",
|
||||||
|
llgh = "0000e30000000091k",
|
||||||
|
llghr = "00000000b9850000h",
|
||||||
|
llhh = "0000e300000000c6k",
|
||||||
|
llhrl = "0000c40200000000l",
|
||||||
|
llghrl = "0000c40600000000l",
|
||||||
|
llihf = "0000c00e00000000l",
|
||||||
|
llilf = "0000c00f00000000l",
|
||||||
|
llgfrl = "0000c40e00000000l",
|
||||||
|
llgt = "0000e30000000017k",
|
||||||
|
llgtr = "00000000b9170000h",
|
||||||
|
lm = "0000000098000000m",
|
||||||
|
lmy = "0000eb0000000098n",
|
||||||
|
lmg = "0000eb0000000004n",
|
||||||
|
lmh = "0000eb0000000096n",
|
||||||
|
lnr = "0000000000001100g",
|
||||||
|
lngr = "00000000b9010000h",
|
||||||
|
lngfr = "00000000b9110000h",
|
||||||
|
lnxbr = "00000000b3410000h",
|
||||||
|
lnxr = "00000000b3610000h",
|
||||||
|
lndbr = "00000000b3110000h",
|
||||||
|
lndr = "0000000000002100g",
|
||||||
|
lndfr = "00000000b3710000h",
|
||||||
|
lnebr = "00000000b3010000h",
|
||||||
|
lner = "0000000000003100g",
|
||||||
|
loc = "0000eb00000000f2n",
|
||||||
|
locg = "0000eb00000000e2n",
|
||||||
|
lpq = "0000e3000000008fk",
|
||||||
|
lpr = "0000000000001000g",
|
||||||
|
lpgr = "00000000b9000000h",
|
||||||
|
lpgfr = "00000000b9100000h",
|
||||||
|
lpxbr = "00000000b3400000h",
|
||||||
|
lpxr = "00000000b3600000h",
|
||||||
|
lpdbr = "00000000b3100000h",
|
||||||
|
lpdr = "0000000000002000g",
|
||||||
|
lpdfr = "00000000b3700000h",
|
||||||
|
lpebr = "00000000b3000000h",
|
||||||
|
lper = "0000000000003000g",
|
||||||
|
lra = "00000000b1000000j",
|
||||||
|
lray = "0000e30000000013k",
|
||||||
|
lrag = "0000e30000000003k",
|
||||||
|
lrl = "0000c40d00000000l",
|
||||||
|
lgrl = "0000c40800000000l",
|
||||||
|
lgfrl = "0000c40c00000000l",
|
||||||
|
lrvh = "0000e3000000001fk",
|
||||||
|
lrv = "0000e3000000001ek",
|
||||||
|
lrvr = "00000000b91f0000h",
|
||||||
|
lrvg = "0000e3000000000fk",
|
||||||
|
lrvgr = "00000000b90f0000h",
|
||||||
|
ldxbr = "00000000b3450000h",
|
||||||
|
ldxr = "0000000000002500g",
|
||||||
|
lrdr = "0000000000002500g",
|
||||||
|
lexbr = "00000000b3460000h",
|
||||||
|
lexr = "00000000b3660000h",
|
||||||
|
ledbr = "00000000b3440000h",
|
||||||
|
ledr = "0000000000003500g",
|
||||||
|
lrer = "0000000000003500g",
|
||||||
|
lura = "00000000b24b0000h",
|
||||||
|
lurag = "00000000b9050000h",
|
||||||
|
lzxr = "00000000b3760000h",
|
||||||
|
lzdr = "00000000b3750000h",
|
||||||
|
lzer = "00000000b3740000h",
|
||||||
|
msta = "00000000b2470000h",
|
||||||
|
mvcl = "0000000000000e00g",
|
||||||
|
mvcle = "00000000a8000000m",
|
||||||
|
mvclu = "0000eb000000008en",
|
||||||
|
mvpg = "00000000b2540000h",
|
||||||
|
mvst = "00000000b2550000h",
|
||||||
|
m = "000000005c000000j",
|
||||||
|
mfy = "0000e3000000005ck",
|
||||||
|
mr = "0000000000001c00g",
|
||||||
|
mxbr = "00000000b34c0000h",
|
||||||
|
mxr = "0000000000002600g",
|
||||||
|
mdbr = "00000000b31c0000h",
|
||||||
|
md = "000000006c000000j",
|
||||||
|
mdr = "0000000000002c00g",
|
||||||
|
mxdbr = "00000000b3070000h",
|
||||||
|
mxd = "0000000067000000j",
|
||||||
|
mxdr = "0000000000002700g",
|
||||||
|
meebr = "00000000b3170000h",
|
||||||
|
meer = "00000000b3370000h",
|
||||||
|
mdebr = "00000000b30c0000h",
|
||||||
|
mde = "000000007c000000j",
|
||||||
|
mder = "0000000000003c00g",
|
||||||
|
me = "000000007c000000j",
|
||||||
|
mer = "0000000000003c00g",
|
||||||
|
mh = "000000004c000000j",
|
||||||
|
mhy = "0000e3000000007ck",
|
||||||
|
mlg = "0000e30000000086k",
|
||||||
|
mlgr = "00000000b9860000h",
|
||||||
|
ml = "0000e30000000096k",
|
||||||
|
mlr = "00000000b9960000h",
|
||||||
|
ms = "0000000071000000j",
|
||||||
|
msr = "00000000b2520000h",
|
||||||
|
msy = "0000e30000000051k",
|
||||||
|
msg = "0000e3000000000ck",
|
||||||
|
msgr = "00000000b90c0000h",
|
||||||
|
msgf = "0000e3000000001ck",
|
||||||
|
msgfr = "00000000b91c0000h",
|
||||||
|
msfi = "0000c20100000000l",
|
||||||
|
msgfi = "0000c20000000000l",
|
||||||
|
o = "0000000056000000j",
|
||||||
|
or = "0000000000001600g",
|
||||||
|
oy = "0000e30000000056k",
|
||||||
|
og = "0000e30000000081k",
|
||||||
|
ogr = "00000000b9810000h",
|
||||||
|
oihf = "0000c00c00000000l",
|
||||||
|
oilf = "0000c00d00000000l",
|
||||||
|
pgin = "00000000b22e0000h",
|
||||||
|
pgout = "00000000b22f0000h",
|
||||||
|
pcc = "00000000b92c0000h",
|
||||||
|
pckmo = "00000000b9280000h",
|
||||||
|
pfmf = "00000000b9af0000h",
|
||||||
|
ptf = "00000000b9a20000h",
|
||||||
|
popcnt = "00000000b9e10000h",
|
||||||
|
pfd = "0000e30000000036k",
|
||||||
|
pfdrl = "0000c60200000000l",
|
||||||
|
pt = "00000000b2280000h",
|
||||||
|
pti = "00000000b99e0000h",
|
||||||
|
palb = "00000000b2480000h",
|
||||||
|
rrbe = "00000000b22a0000h",
|
||||||
|
rrbm = "00000000b9ae0000h",
|
||||||
|
rll = "0000eb000000001dn",
|
||||||
|
rllg = "0000eb000000001cn",
|
||||||
|
srst = "00000000b25e0000h",
|
||||||
|
srstu = "00000000b9be0000h",
|
||||||
|
sar = "00000000b24e0000h",
|
||||||
|
sfpc = "00000000b3840000h",
|
||||||
|
sfasr = "00000000b3850000h",
|
||||||
|
spm = "000000000000400g",
|
||||||
|
ssar = "00000000b2250000h",
|
||||||
|
ssair = "00000000b99f0000h",
|
||||||
|
slda = "000000008f000000m",
|
||||||
|
sldl = "000000008d000000m",
|
||||||
|
sla = "000000008b000000m",
|
||||||
|
slak = "0000eb00000000ddn",
|
||||||
|
slag = "0000eb000000000bn",
|
||||||
|
sll = "0000000089000000m",
|
||||||
|
sllk = "0000eb00000000dfn",
|
||||||
|
sllg = "0000eb000000000dn",
|
||||||
|
srda = "000000008e000000m",
|
||||||
|
srdl = "000000008c000000m",
|
||||||
|
sra = "000000008a000000m",
|
||||||
|
srak = "0000eb00000000dcn",
|
||||||
|
srag = "0000eb000000000an",
|
||||||
|
srl = "0000000088000000m",
|
||||||
|
srlk = "0000eb00000000den",
|
||||||
|
srlg = "0000eb000000000cn",
|
||||||
|
sqxbr = "00000000b3160000h",
|
||||||
|
sqxr = "00000000b3360000h",
|
||||||
|
sqdbr = "00000000b3150000h",
|
||||||
|
sqdr = "00000000b2440000h",
|
||||||
|
sqebr = "00000000b3140000h",
|
||||||
|
sqer = "00000000b2450000h",
|
||||||
|
st = "0000000050000000j",
|
||||||
|
sty = "0000e30000000050k",
|
||||||
|
stg = "0000e30000000024k",
|
||||||
|
std = "0000000060000000j",
|
||||||
|
stdy = "0000ed0000000067k",
|
||||||
|
ste = "0000000070000000j",
|
||||||
|
stey = "0000ed0000000066k",
|
||||||
|
stam = "000000009b000000m",
|
||||||
|
stamy = "0000eb000000009bn",
|
||||||
|
stc = "0000000042000000j",
|
||||||
|
stcy = "0000e30000000072k",
|
||||||
|
stch = "0000e300000000c3k",
|
||||||
|
stcmh = "0000eb000000002cn",
|
||||||
|
stcm = "00000000be000000m",
|
||||||
|
stcmy = "0000eb000000002dn",
|
||||||
|
stctl = "00000000b6000000m",
|
||||||
|
stctg = "0000eb0000000025n",
|
||||||
|
sth = "0000000040000000j",
|
||||||
|
sthy = "0000e30000000070k",
|
||||||
|
sthh = "0000e300000000c7k",
|
||||||
|
sthrl = "0000c40700000000l",
|
||||||
|
stfh = "0000e300000000cbk",
|
||||||
|
stm = "0000000090000000m",
|
||||||
|
stmy = "0000eb0000000090n",
|
||||||
|
stmg = "0000eb0000000024n",
|
||||||
|
stmh = "0000eb0000000026n",
|
||||||
|
stoc = "0000eb00000000f3n",
|
||||||
|
stocg = "0000eb00000000e3n",
|
||||||
|
stpq = "0000e3000000008ek",
|
||||||
|
strl = "0000c40f00000000l",
|
||||||
|
stgrl = "0000c40b00000000l",
|
||||||
|
strvh = "0000e3000000003fk",
|
||||||
|
strv = "0000e3000000003ek",
|
||||||
|
strvg = "0000e3000000002fk",
|
||||||
|
stura = "00000000b2460000h",
|
||||||
|
sturg = "00000000b9250000h",
|
||||||
|
s = "000000005b000000j",
|
||||||
|
sr = "0000000000001b00g",
|
||||||
|
sy = "0000e3000000005bk",
|
||||||
|
sg = "0000e30000000009k",
|
||||||
|
sgr = "00000000b9090000h",
|
||||||
|
sgf = "0000e30000000019k",
|
||||||
|
sgfr = "00000000b9190000h",
|
||||||
|
sxbr = "00000000b34b0000h",
|
||||||
|
sdbr = "00000000b31b0000h",
|
||||||
|
sebr = "00000000b30b0000h",
|
||||||
|
sh = "000000004b000000j",
|
||||||
|
shy = "0000e3000000007bk",
|
||||||
|
sl = "000000005f000000j",
|
||||||
|
slr = "0000000000001f00g",
|
||||||
|
sly = "0000e3000000005fk",
|
||||||
|
slg = "0000e3000000000bk",
|
||||||
|
slgr = "00000000b90b0000h",
|
||||||
|
slgf = "0000e3000000001bk",
|
||||||
|
slgfr = "00000000b91b0000h",
|
||||||
|
slfi = "0000c20500000000l",
|
||||||
|
slgfi = "0000c20400000000l",
|
||||||
|
slb = "0000e30000000099k",
|
||||||
|
slbr = "00000000b9990000h",
|
||||||
|
slbg = "0000e30000000089k",
|
||||||
|
slbgr = "00000000b9890000h",
|
||||||
|
sxr = "0000000000003700g",
|
||||||
|
sd = "000000006b000000j",
|
||||||
|
sdr = "0000000000002b00g",
|
||||||
|
se = "000000007b000000j",
|
||||||
|
ser = "0000000000003b00g",
|
||||||
|
su = "000000007f000000j",
|
||||||
|
sur = "0000000000003f00g",
|
||||||
|
sw = "000000006f000000j",
|
||||||
|
swr = "0000000000002f00g",
|
||||||
|
tar = "00000000b24c0000h",
|
||||||
|
tb = "00000000b22c0000h",
|
||||||
|
trace = "0000000099000000m",
|
||||||
|
tracg = "0000eb000000000fn",
|
||||||
|
tre = "00000000b2a50000h",
|
||||||
}
|
}
|
||||||
for cond,c in pairs(map_cond) do
|
for cond,c in pairs(map_cond) do
|
||||||
map_op["b"..cond.."_1"] = tohex(0x54000000+c).."B"
|
map_op["b"..cond.."_1"] = tohex(0x54000000+c).."B"
|
||||||
@ -964,87 +1218,30 @@ end
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Handle opcodes defined with template strings.
|
-- Handle opcodes defined with template strings.
|
||||||
local function parse_template(params, template, nparams, pos)
|
local function parse_template(params, template, nparams, pos)
|
||||||
local op = tonumber(sub(template, 1, 12), 16) -- 13-16 ignored since those are trailing zeros added after the instruction
|
local op = tonumber(sub(template, 1, 16), 16) --
|
||||||
-- 00000000005a0000 converts to 90
|
-- 00000000005a0000 converts to 90
|
||||||
local n,rs = 1,26
|
local n,rs = 1,26
|
||||||
|
|
||||||
parse_reg_type = false
|
parse_reg_type = false
|
||||||
-- Process each character. (if its RX-a==> 1st iteration gets R, 2nd==X and so on)
|
-- Process each character. (if its RX-a==> 1st iteration gets R, 2nd==X and so on)
|
||||||
for p in gmatch(sub(template, 17), ".") do
|
for p in gmatch(sub(template, 17), ".") do
|
||||||
local q = params[n]
|
local pr1,pr2,pr3
|
||||||
if p == "R" then
|
if p == "g" then
|
||||||
op = op + parse_reg(q); n = n + 1
|
pr1,pr2=param[n],param[n+1]
|
||||||
elseif p == "N" then
|
op = op + parse_reg(pr1)+parse_reg(pr2); n = n + 1 -- not sure if we will require n later, so keeping it as it is now
|
||||||
op = op + shl(parse_reg(q), 5); n = n + 1
|
elseif p == "h" then
|
||||||
elseif p == "M" then
|
|
||||||
op = op + shl(parse_reg(q), 16); n = n + 1
|
elseif p == "j" then
|
||||||
elseif p == "A" then
|
|
||||||
op = op + shl(parse_reg(q), 10); n = n + 1
|
elseif p == "k" then
|
||||||
|
|
||||||
|
elseif p == "l" then
|
||||||
|
|
||||||
elseif p == "m" then
|
elseif p == "m" then
|
||||||
op = op + shl(parse_reg(params[n-1]), 16)
|
|
||||||
elseif p == "p" then
|
elseif p == "n" then
|
||||||
if q == "sp" then params[n] = "@x31" end
|
|
||||||
elseif p == "g" then
|
|
||||||
if parse_reg_type == "x" then
|
|
||||||
op = op + 0x80000000
|
|
||||||
elseif parse_reg_type ~= "w" then
|
|
||||||
werror("bad register type")
|
|
||||||
end
|
end
|
||||||
parse_reg_type = false
|
|
||||||
elseif p == "f" then
|
|
||||||
if parse_reg_type == "d" then
|
|
||||||
op = op + 0x00400000
|
|
||||||
elseif parse_reg_type ~= "s" then
|
|
||||||
werror("bad register type")
|
|
||||||
end
|
|
||||||
parse_reg_type = false
|
|
||||||
elseif p == "x" or p == "w" or p == "d" or p == "s" then
|
|
||||||
if parse_reg_type ~= p then
|
|
||||||
werror("register size mismatch")
|
|
||||||
end
|
|
||||||
parse_reg_type = false
|
|
||||||
elseif p == "L" then
|
|
||||||
op = parse_load(params, nparams, n, op)
|
|
||||||
elseif p == "P" then
|
|
||||||
op = parse_load_pair(params, nparams, n, op)
|
|
||||||
elseif p == "B" then
|
|
||||||
local mode, v, s = parse_label(q, false); n = n + 1
|
|
||||||
local m = branch_type(op)
|
|
||||||
waction("REL_"..mode, v+m, s, 1)
|
|
||||||
elseif p == "I" then
|
|
||||||
op = op + parse_imm12(q); n = n + 1
|
|
||||||
elseif p == "i" then
|
|
||||||
op = op + parse_imm13(q); n = n + 1
|
|
||||||
elseif p == "W" then
|
|
||||||
op = op + parse_imm(q, 16, 5, 0, false); n = n + 1
|
|
||||||
elseif p == "T" then
|
|
||||||
op = op + parse_imm6(q); n = n + 1
|
|
||||||
elseif p == "1" then
|
|
||||||
op = op + parse_imm(q, 6, 16, 0, false); n = n + 1
|
|
||||||
elseif p == "2" then
|
|
||||||
op = op + parse_imm(q, 6, 10, 0, false); n = n + 1
|
|
||||||
elseif p == "5" then
|
|
||||||
op = op + parse_imm(q, 5, 16, 0, false); n = n + 1
|
|
||||||
elseif p == "V" then
|
|
||||||
op = op + parse_imm(q, 4, 0, 0, false); n = n + 1
|
|
||||||
elseif p == "F" then
|
|
||||||
op = op + parse_fpimm(q); n = n + 1
|
|
||||||
elseif p == "Z" then
|
|
||||||
if q ~= "#0" and q ~= "#0.0" then werror("expected zero immediate") end
|
|
||||||
n = n + 1
|
|
||||||
elseif p == "S" then
|
|
||||||
op = op + parse_shift(q); n = n + 1
|
|
||||||
elseif p == "X" then
|
|
||||||
op = op + parse_extend(q); n = n + 1
|
|
||||||
elseif p == "R" then
|
|
||||||
op = op + parse_lslx16(q); n = n + 1
|
|
||||||
elseif p == "C" then
|
|
||||||
op = op + parse_cond(q, 0); n = n + 1
|
|
||||||
elseif p == "c" then
|
|
||||||
op = op + parse_cond(q, 1); n = n + 1
|
|
||||||
else
|
|
||||||
assert(false)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
wputpos(pos, op)
|
wputpos(pos, op)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user