diff options
Diffstat (limited to 'miasm2/arch/sh4/arch.py')
| -rw-r--r-- | miasm2/arch/sh4/arch.py | 437 |
1 files changed, 1 insertions, 436 deletions
diff --git a/miasm2/arch/sh4/arch.py b/miasm2/arch/sh4/arch.py index edd1a9ce..f6bf809c 100644 --- a/miasm2/arch/sh4/arch.py +++ b/miasm2/arch/sh4/arch.py @@ -1,12 +1,11 @@ #!/usr/bin/env python #-*- coding:utf-8 -*- -import os from pyparsing import * from miasm2.core.cpu import * from miasm2.expression.expression import * from collections import defaultdict -from regs import * +from miasm2.arch.sh4.regs import * jra = ExprId('jra') @@ -971,437 +970,3 @@ addop("fneg", [bs('1111'), frn, bs('01001101')]) addop("fsqrt", [bs('1111'), frn, bs('01101101')]) addop("fsub", [bs('1111'), frn, frm, bs('0001')], [frm, frn]) addop("ftrc", [bs('1111'), frm, bsfpul, bs('00111101')]) - - -if __name__ == '__main__': - import os - import time - filename = os.environ.get('PYTHONSTARTUP') - if filename and os.path.isfile(filename): - execfile(filename) - - def h2i(s): - return s.replace(' ', '').decode('hex') - - reg_tests_sh4 = [ - # vxworks - ("c80022f2 MOV 0x10, R6", - "10e6"), - ("c8002250 MOV 0xFFFFFFFF, R0", - "ffe0"), - ("c800226a MOV.W @(PC,0xC0), R9", - "5e99"), - ("c8002006 MOV.L @(PC&0xFFFFFFFC,0x10), R15", - "03df"), - ("c800cfc4 MOV R4, R9", - "4369"), - ("C8005004 MOV.B R1, @R2", - "1022"), - ("C8002E04 MOV.W R0, @R8", - '0128'), - ("c800223e MOV.L R1, @R14", - "122E"), - - ("c8002002 MOV.L @R1, R0", - "1260"), - ("c8002E08 MOV.W @R8, R1", - "8161"), - ("c800357c MOV.B @R4, R1", - "4061"), - - ("c8002220 MOV.L R8, @-R15", - "862f"), - ("c8022a66 MOV.B R4, @-R0", - "4420"), - ("c8002310 MOV.L @R15+, R14", - "f66e"), - ("c80038a4 MOV.W @R8+, R5", - "8565"), - ("xxxxxxxx MOV.B R0, @(R8,0x2)", - "8280"), - ("xxxxxxxx MOV.W R0, @(R8,0x4)", - "8281"), - ("c8002274 MOV.L R0, @(R9,0x8)", - "0219"), - ("xxxxxxxx MOV.B @(R8,0x8), R0", - "8884"), - ("xxxxxxxx MOV.W @(R8,0x10), R0", - "8885"), - ("c8002500 MOV.L @(R14,0x4), R5", - "e155"), - ("xxxxxxxx MOV.B R4, @(R0,R8)", - "4408"), - ("xxxxxxxx MOV.W R4, @(R0,R8)", - "4508"), - ("xxxxxxxx MOV.L R4, @(R0,R8)", - "4608"), - ("xxxxxxxx MOV.B @(R0,R4), R8", - "4c08"), - ("xxxxxxxx MOV.W @(R0,R4), R8", - "4d08"), - ("xxxxxxxx MOV.L @(R0,R4), R8", - "4e08"), - ("xxxxxxxx MOV.B R0, @(GBR,0x4)", - "04c0"), - ("xxxxxxxx MOV.W R0, @(GBR,0x8)", - "04c1"), - ("xxxxxxxx MOV.L R0, @(GBR,0x10)", - "04c2"), - ("xxxxxxxx MOV.B @(GBR,0x4), R0", - "04c4"), - ("xxxxxxxx MOV.W @(GBR,0x8), R0", - "04c5"), - ("xxxxxxxx MOV.L @(GBR,0x10), R0", - "04c6"), - #("xxxxxxxx MOV PC&0xFFFFFFFC+0x14, R0", - # "04c7"), - ("xxxxxxxx SWAPB R2, R1", - "2861"), - ("c803f492 SWAPW R4, R9", - "4969"), - ("xxxxxxxx XTRCT R4, R9", - "4d29"), - ("c8002270 ADD R12, R9", - "cc39"), - ("c8002238 ADD 0xFFFFFFFC, R15", - "FC7F"), - ("c80164cc ADDC R0, R1", - "0e31"), - ("xxxxxxxx ADDV R0, R1", - "0f31"), - ("c8002994 CMPEQ 0x20, R0", - "2088"), - ("c80029d2 CMPEQ R2, R1", - "2031"), - ("c8003964 CMPHS R5, R3", - "5233"), - ("c8002df2 CMPGE R0, R1", - "0331"), - ("c80029a4 CMPHI R1, R0", - "1630"), - ("c8002bfe CMPGT R10, R8", - "a738"), - ("c8002bf8 CMPPZ R0", - "1140"), - ("c8006294 CMPPL R2", - "1542"), - ("c8033800 CMPSTR R14, R4", - "ec24"), - ("xxxxxxxx DIV1 R14, R4", - "e434"), - ("c8d960de DIV0S R0, R3", - "0723"), - ("xxxxxxxx DIV0U ", - "1900"), - ("c800dcd8 DMULS R1, R0", - "1d30"), - ("c80164da DMULU R3, R8", - "3538"), - ("c80024e2 DT R10", - "104a"), - ("c800343a EXTSB R1, R1", - "1e61"), - ("c8002bf6 EXTSW R0, R0", - "0f60"), - ("c8002fba EXTUB R0, R0", - "0c60"), - ("c8002398 EXTUW R0, R0", - "0d60"), - ("xxxxxxxx MAC.L @R5+, @R4+", - "5f04"), - ("xxxxxxxx MAC.W @R5+, @R4+", - "5f44"), - ("c8005112 MULL R1, R3", - "1703"), - ("xxxxxxxx MULSW R1, R3", - "1F23"), - ("xxxxxxxx MULUW R1, R3", - "1e23"), - ("c8004856 NEG R1, R8", - "1b68"), - ("c80054fc NEGC R9, R7", - "9a67"), - ("c8004b36 SUB R1, R5", - "1835"), - ("c800a536 SUBC R1, R0", - "1a30"), - ("xxxxxxxx SUBV R1, R0", - "1b30"), - ("c80023ca AND R0, R5", - "0925"), - ("c800257c AND 0x2, R0", - "02c9"), - ("xxxxxxxx AND.B 0x2, @(GBR,R0)", - "02cd"), - ("c80065fe NOT R5, R1", - "5761"), - ("c8002586 OR R10, R1", - "ab21"), - ("c80023aa OR 0x4, R0", - "04cb"), - ("xxxxxxxx OR.B 0x4, @(GBR,R0)", - "04cf"), - ("xxxxxxxx TAS.B @R8", - "1b48"), - ("c8002368 TST R10, R13", - "a82d"), - ("c8003430 TST 0x11, R0", - "11c8"), - ("xxxxxxxx TST.B 0x4, @(GBR,R0)", - "04cc"), - ("c8003978 XOR R1, R6", - "1a26"), - ("c8028270 XOR 0x1, R0", - "01ca"), - ("xxxxxxxx XOR.B 0x4, @(GBR,R0)", - "04cE"), - ("xxxxxxxx ROTL R9", - "0449"), - ("xxxxxxxx ROTR R9", - "0549"), - ("xxxxxxxx ROTCL R9", - "2449"), - ("xxxxxxxx ROTCR R9", - "2549"), - ("xxxxxxxx SHAL R11", - "204b"), - ("xxxxxxxx SHAR R11", - "214b"), - ("c800236c SHLD R6, R10", - "6d4a"), - ("xxxxxxxx SHLL R11", - "004b"), - ("xxxxxxxx SHLR R11", - "014b"), - ("xxxxxxxx SHLL2 R11", - "084b"), - ("xxxxxxxx SHLR2 R11", - "094b"), - ("xxxxxxxx SHLL8 R11", - "184b"), - ("xxxxxxxx SHLR8 R11", - "194b"), - ("xxxxxxxx SHLL16 R11", - "284b"), - ("xxxxxxxx SHLR16 R11", - "294b"), - ("c8002c00 BF 0xFFFFFFF4", - "f48b"), - ("c80023c2 BFS 0xFFFFFFD8", - "d88f"), - ("c8002266 BT 0x5B", - "5b89"), - ("c8002266 BTS 0x5C", - "5c8d"), - ("c8002326 BRA 0xFFFFFFF0", - "f0af"), - ("c8004b4a BRAF R1", - "2301"), - ("c8055da4 BSR 0xFFFFFE48", - "48be"), - ("xxxxxxxx BSRF R1", - "0301"), - ("c80027b4 JMP.L @R1", - "2b41"), - ("c800200c JSR.L @R0", - "0b40"), - ("c800231a RTS ", - "0b00"), - ("xxxxxxxx CLRMAC ", - "2800"), - ("xxxxxxxx CLRS ", - "4800"), - ("xxxxxxxx CLRT ", - "0800"), - ("c8002004 LDC R0, SR", - "0e40"), - ("c800200e LDC R1, GBR", - "1e41"), - ("c8064bd4 LDC R8, VBR", - "2e48"), - ("xxxxxxxx LDC R8, SSR", - "3e48"), - ("xxxxxxxx LDC R8, SPC", - "4e48"), - ("xxxxxxxx LDC R8, DBR", - "fa48"), - ("xxxxxxxx LDC R8, R0_BANK", - "8e48"), - ("xxxxxxxx LDC.L @R8+, SR", - "0748"), - ("xxxxxxxx LDC.L @R8+, GBR", - "1748"), - ("xxxxxxxx LDC.L @R8+, VBR", - "2748"), - ("xxxxxxxx LDC.L @R8+, SSR", - "3748"), - ("xxxxxxxx LDC.L @R8+, SPC", - "4748"), - ("xxxxxxxx LDC.L @R8+, DBR", - "f648"), - ("xxxxxxxx LDC.L @R8+, R2_BANK", - "a748"), - ("xxxxxxxx LDS R8, MACH", - "0a48"), - ("xxxxxxxx LDS R8, MACL", - "1a48"), - ("xxxxxxxx LDS R8, PR", - "2a48"), - ("xxxxxxxx LDS.L @R8+, MACH", - "0648"), - ("xxxxxxxx LDS.L @R8+, MACL", - "1648"), - ("xxxxxxxx LDTLB ", - "3800"), - ("xxxxxxxx MOVCA.L R0, @R8", - "c308"), - ("xxxxxxxx NOP ", - "0900"), - ("xxxxxxxx OCBI.L @R8", - "9308"), - ("xxxxxxxx OCBP.L @R8", - "a308"), - ("xxxxxxxx OCBWB.L @R8", - "b308"), - ("xxxxxxxx PREF.L @R8", - "8308"), - ("xxxxxxxx STS MACH, R8", - "0a08"), - ("xxxxxxxx STS MACL, R8", - "1a08"), - ("xxxxxxxx STS PR, R8", - "2a08"), - ("xxxxxxxx STS.L MACH, @-R8", - "0248"), - ("xxxxxxxx STS.L MACL, @-R8", - "1248"), - ("xxxxxxxx STS.L PR, @-R8", - "2248"), - - - - - - ("c8004b50 STC GBR, R0", - "1200"), - ("c8064516 STC VBR, R1", - "2201"), - ("c8004b54 STC SSR, R1", - "3201"), - ("c801ed6c STC SPC, R0", - "4200"), - ("xxxxxxxx STC SGR, R0", - "3a00"), - ("xxxxxxxx STC DBR, R0", - "fa00"), - ("c8004b56 STC R3_BANK, R1", - "B201"), - ("xxxxxxxx STC.L SR, @-R8", - "0348"), - ("xxxxxxxx STC.L GBR, @-R8", - "1348"), - ("xxxxxxxx STC.L VBR, @-R8", - "2348"), - ("xxxxxxxx STC.L SSR, @-R8", - "3348"), - ("xxxxxxxx STC.L SPC, @-R8", - "4348"), - ("xxxxxxxx STC.L DBR, @-R8", - "f248"), - ("xxxxxxxx STC.L R7_BANK, @-R8", - "f348"), - ("c803b130 TRAPA 0xE0", - "e0c3"), - - ("xxxxxxxx FLDI0 FR8", - "8df8"), - ("xxxxxxxx FLDI1 FR8", - "9df8"), - ("c8019ca8 FMOV FR15, FR5", - "fcf5"), - ("c800affe FMOV.S @R1, FR4", - "18f4"), - ("c80283f6 FMOV.S @(R0,R14), FR5", - "e6f5"), - ("c800aff8 FMOV.S @R1+, FR5", - "19f5"), - ("c80cb692 FMOV.S FR0, @R2", - "0af2"), - ("c80cb694 FMOV.S FR1, @-R2", - "1bf2"), - ("c80283aa FMOV.S FR1, @(R0,R14)", - "17fe"), - ("c800ce16 FLDS FR13, FPUL", - "1dfd"), - ("c800ce08 FSTS FPUL, FR13", - "0dfd"), - ("xxxxxxxx FABS FR8", - "5df8"), - ("c800cf28 FADD FR2, FR6", - "20f6"), - ("c805dacc FCMPEQ FR2, FR6", - "24f6"), - ("c8028406 FCMPGT FR4, FR2", - "45f2"), - ("c8019ca4 FDIV FR2, FR12", - "23fc"), - ("c800ce5e FLOAT FPUL, FR2", - "2df2"), - ("xxxxxxxx FMAC FR0, FR1, FR2", - "1ef2"), - ("c800b006 FMUL FR2, FR4", - "22f4"), - ("c805e412 FNEG FR14", - "4dfe"), - ("xxxxxxxx FSQRT FR14", - "6dfe"), - ("c8030400 FSUB FR4, FR2", - "41f2"), - ("c80303ba FTRC FR2, FPUL", - "3df2"), - - ] - - for s, l in reg_tests_sh4: - print "-" * 80 - s = s[12:] - b = h2i((l)) - print b.encode('hex') - mn = mn_sh4.dis(b, None) - print [str(x) for x in mn.args] - print s - print mn - assert(str(mn) == s) - # print hex(b) - # print [str(x.get()) for x in mn.args] - l = mn_sh4.fromstring(s, None) - # print l - assert(str(l) == s) - a = mn_sh4.asm(l, None) - print [x for x in a] - print repr(b) - # print mn.args - assert(b in a) - - # speed test - o = "" - for s, l, in reg_tests_sh4: - s = s[12:] - b = h2i((l)) - o += b - - while len(o) < 1000: - o += o - bs = bin_stream_str(o) - off = 0 - instr_num = 0 - ts = time.time() - while off < bs.getlen(): - mn = mn_sh4.dis(bs, None, off) - # print instr_num, off, mn.l, str(mn) - instr_num += 1 - off += mn.l - print 'instr per sec:', instr_num / (time.time() - ts) - - import cProfile - cProfile.run(r'mn_sh4.dis("\x17\xfe", None)') |