xref: /aosp_15_r20/external/capstone/suite/ppcbranch.py (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi#!/usr/bin/env python
2*9a0e4156SSadaf Ebrahimi
3*9a0e4156SSadaf Ebrahimi# Capstone by Nguyen Anh Quynnh <[email protected]>
4*9a0e4156SSadaf Ebrahimi# PPC Branch testing suite by kratolp
5*9a0e4156SSadaf Ebrahimifrom __future__ import print_function
6*9a0e4156SSadaf Ebrahimiimport sys
7*9a0e4156SSadaf Ebrahimifrom capstone import *
8*9a0e4156SSadaf Ebrahimi
9*9a0e4156SSadaf EbrahimiCODE32  = b"\x48\x01\x05\x15" # bl .+0x10514
10*9a0e4156SSadaf EbrahimiCODE32 += b"\x4B\xff\xff\xfd" # bl .-0x4
11*9a0e4156SSadaf EbrahimiCODE32 += b"\x48\x00\x00\x0c" # b .+0xc
12*9a0e4156SSadaf EbrahimiCODE32 += b"\x41\x80\xff\xd8" # blt .-0x28
13*9a0e4156SSadaf EbrahimiCODE32 += b"\x40\x80\xff\xec" # bge .-0x14
14*9a0e4156SSadaf EbrahimiCODE32 += b"\x41\x84\x01\x6c" # blt cr1, .+0x16c
15*9a0e4156SSadaf EbrahimiCODE32 += b"\x41\x82\x00\x10" # beq .+0x10
16*9a0e4156SSadaf EbrahimiCODE32 += b"\x40\x82\x00\x08" # bne .+0x8
17*9a0e4156SSadaf EbrahimiCODE32 += b"\x40\x95\x00\x94" # ble cr5,.+0x94
18*9a0e4156SSadaf EbrahimiCODE32 += b"\x40\x9f\x10\x30" # bns cr5,.+0x94
19*9a0e4156SSadaf EbrahimiCODE32 += b"\x42\x00\xff\xd8" # bdnz .-0x28
20*9a0e4156SSadaf EbrahimiCODE32 += b"\x4d\x82\x00\x20" # beqlr
21*9a0e4156SSadaf EbrahimiCODE32 += b"\x4e\x80\x00\x20" # blr
22*9a0e4156SSadaf EbrahimiCODE32 += b"\x4a\x00\x00\x02" # ba .0xfe000000
23*9a0e4156SSadaf EbrahimiCODE32 += b"\x41\x80\xff\xda" # blta .0xffffffd8
24*9a0e4156SSadaf EbrahimiCODE32 += b"\x41\x4f\xff\x17" # bdztla 4*cr3+so, .0xffffff14
25*9a0e4156SSadaf EbrahimiCODE32 += b"\x43\x20\x0c\x07" # bdnzla+ .0xc04
26*9a0e4156SSadaf EbrahimiCODE32 += b"\x4c\x00\x04\x20" # bdnzfctr lt
27*9a0e4156SSadaf Ebrahimi
28*9a0e4156SSadaf Ebrahimi_python3 = sys.version_info.major == 3
29*9a0e4156SSadaf Ebrahimi
30*9a0e4156SSadaf Ebrahimiall_tests = (
31*9a0e4156SSadaf Ebrahimi        (CS_ARCH_PPC, CS_MODE_BIG_ENDIAN, CODE32, "PPC branch instruction decoding", 0),
32*9a0e4156SSadaf Ebrahimi)
33*9a0e4156SSadaf Ebrahimi
34*9a0e4156SSadaf Ebrahimi
35*9a0e4156SSadaf Ebrahimidef to_hex(s):
36*9a0e4156SSadaf Ebrahimi    if _python3:
37*9a0e4156SSadaf Ebrahimi        return " ".join("0x{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
38*9a0e4156SSadaf Ebrahimi    else:
39*9a0e4156SSadaf Ebrahimi        return " ".join("0x{0:02x}".format(ord(c)) for c in s)
40*9a0e4156SSadaf Ebrahimi
41*9a0e4156SSadaf Ebrahimi# ## Test cs_disasm_quick()
42*9a0e4156SSadaf Ebrahimidef test_cs_disasm_quick():
43*9a0e4156SSadaf Ebrahimi    for (arch, mode, code, comment, syntax) in all_tests:
44*9a0e4156SSadaf Ebrahimi        print("Platform: %s" % comment)
45*9a0e4156SSadaf Ebrahimi        print("Code: %s" %(to_hex(code))),
46*9a0e4156SSadaf Ebrahimi        print("Disasm:")
47*9a0e4156SSadaf Ebrahimi        for (addr, size, mnemonic, op_str) in cs_disasm_lite(arch, mode, code, 0x1000):
48*9a0e4156SSadaf Ebrahimi            print("0x%x:\t%s\t%s" % (addr, mnemonic, op_str))
49*9a0e4156SSadaf Ebrahimi        print()
50*9a0e4156SSadaf Ebrahimi
51*9a0e4156SSadaf Ebrahimi
52*9a0e4156SSadaf Ebrahimiif __name__ == '__main__':
53*9a0e4156SSadaf Ebrahimi    test_cs_disasm_quick()
54