/* * libbinrec: a recompiling translator for machine code * Copyright (c) 2016 Andrew Church * * This software may be copied and redistributed under certain conditions; * see the file "COPYING" in the source code distribution for details. * NO WARRANTY is provided with this software. */ #include "tests/guest-ppc/insn/common.h" static const uint8_t input[] = { 0xEC,0x22,0x18,0x2A, // fadds f1,f2,f3 }; static const unsigned int guest_opt = 0; static const unsigned int common_opt = 0; static const bool expected_success = true; static const char expected[] = "[info] Scanning terminated at requested limit 0x3\n" " 0: LOAD_ARG r1, 0\n" " 1: LOAD_ARG r2, 1\n" " 2: GET_ALIAS r3, a3\n" " 3: GET_ALIAS r4, a4\n" " 4: FADD r5, r3, r4\n" " 5: FCVT r6, r5\n" " 6: LOAD_IMM r7, 0x1000000\n" " 7: BITCAST r8, r6\n" " 8: SLLI r9, r8, 1\n" " 9: SEQ r10, r9, r7\n" " 10: GOTO_IF_Z r10, L1\n" " 11: FGETSTATE r11\n" " 12: FSETROUND r12, r11, TRUNC\n" " 13: FSETSTATE r12\n" " 14: FADD r13, r3, r4\n" " 15: FCVT r14, r13\n" " 16: FGETSTATE r15\n" " 17: FCOPYROUND r16, r15, r11\n" " 18: FSETSTATE r16\n" " 19: LABEL L1\n" " 20: GET_ALIAS r17, a5\n" " 21: FGETSTATE r18\n" " 22: FCLEAREXC r19, r18\n" " 23: FSETSTATE r19\n" " 24: FTESTEXC r20, r18, INVALID\n" " 25: GOTO_IF_Z r20, L3\n" " 26: BITCAST r21, r3\n" " 27: SLLI r22, r21, 13\n" " 28: BFEXT r23, r21, 51, 12\n" " 29: SEQI r24, r23, 4094\n" " 30: GOTO_IF_Z r24, L5\n" " 31: GOTO_IF_NZ r22, L4\n" " 32: LABEL L5\n" " 33: BITCAST r25, r4\n" " 34: SLLI r26, r25, 13\n" " 35: BFEXT r27, r25, 51, 12\n" " 36: SEQI r28, r27, 4094\n" " 37: GOTO_IF_Z r28, L6\n" " 38: GOTO_IF_NZ r26, L4\n" " 39: LABEL L6\n" " 40: NOT r29, r17\n" " 41: ORI r30, r17, 8388608\n" " 42: ANDI r31, r29, 8388608\n" " 43: SET_ALIAS a5, r30\n" " 44: GOTO_IF_Z r31, L7\n" " 45: ORI r32, r30, -2147483648\n" " 46: SET_ALIAS a5, r32\n" " 47: LABEL L7\n" " 48: ANDI r33, r17, 128\n" " 49: GOTO_IF_Z r33, L8\n" " 50: GET_ALIAS r34, a5\n" " 51: BFEXT r35, r34, 12, 7\n" " 52: ANDI r36, r35, 31\n" " 53: GET_ALIAS r37, a5\n" " 54: BFINS r38, r37, r36, 12, 7\n" " 55: SET_ALIAS a5, r38\n" " 56: GOTO L2\n" " 57: LABEL L8\n" " 58: LOAD_IMM r39, nan(0x400000)\n" " 59: FCVT r40, r39\n" " 60: STORE 408(r1), r40\n" " 61: SET_ALIAS a2, r40\n" " 62: LOAD_IMM r41, 17\n" " 63: GET_ALIAS r42, a5\n" " 64: BFINS r43, r42, r41, 12, 7\n" " 65: SET_ALIAS a5, r43\n" " 66: GOTO L2\n" " 67: LABEL L4\n" " 68: NOT r44, r17\n" " 69: ORI r45, r17, 16777216\n" " 70: ANDI r46, r44, 16777216\n" " 71: SET_ALIAS a5, r45\n" " 72: GOTO_IF_Z r46, L9\n" " 73: ORI r47, r45, -2147483648\n" " 74: SET_ALIAS a5, r47\n" " 75: LABEL L9\n" " 76: ANDI r48, r17, 128\n" " 77: GOTO_IF_Z r48, L3\n" " 78: GET_ALIAS r49, a5\n" " 79: BFEXT r50, r49, 12, 7\n" " 80: ANDI r51, r50, 31\n" " 81: GET_ALIAS r52, a5\n" " 82: BFINS r53, r52, r51, 12, 7\n" " 83: SET_ALIAS a5, r53\n" " 84: GOTO L2\n" " 85: LABEL L3\n" " 86: FCVT r54, r6\n" " 87: STORE 408(r1), r54\n" " 88: SET_ALIAS a2, r54\n" " 89: BITCAST r55, r6\n" " 90: SGTUI r56, r55, 0\n" " 91: SRLI r57, r55, 31\n" " 92: BFEXT r61, r55, 23, 8\n" " 93: SEQI r58, r61, 0\n" " 94: SEQI r59, r61, 255\n" " 95: SLLI r62, r55, 9\n" " 96: SEQI r60, r62, 0\n" " 97: AND r63, r58, r60\n" " 98: XORI r64, r60, 1\n" " 99: AND r65, r59, r64\n" " 100: AND r66, r58, r56\n" " 101: OR r67, r66, r65\n" " 102: OR r68, r63, r65\n" " 103: XORI r69, r68, 1\n" " 104: XORI r70, r57, 1\n" " 105: AND r71, r57, r69\n" " 106: AND r72, r70, r69\n" " 107: SLLI r73, r67, 4\n" " 108: SLLI r74, r71, 3\n" " 109: SLLI r75, r72, 2\n" " 110: SLLI r76, r63, 1\n" " 111: OR r77, r73, r74\n" " 112: OR r78, r75, r76\n" " 113: OR r79, r77, r59\n" " 114: OR r80, r79, r78\n" " 115: FTESTEXC r81, r18, INEXACT\n" " 116: SLLI r82, r81, 5\n" " 117: OR r83, r80, r82\n" " 118: GET_ALIAS r84, a5\n" " 119: BFINS r85, r84, r83, 12, 7\n" " 120: SET_ALIAS a5, r85\n" " 121: GOTO_IF_Z r81, L10\n" " 122: GET_ALIAS r86, a5\n" " 123: NOT r87, r86\n" " 124: ORI r88, r86, 33554432\n" " 125: ANDI r89, r87, 33554432\n" " 126: SET_ALIAS a5, r88\n" " 127: GOTO_IF_Z r89, L11\n" " 128: ORI r90, r88, -2147483648\n" " 129: SET_ALIAS a5, r90\n" " 130: LABEL L11\n" " 131: LABEL L10\n" " 132: FTESTEXC r91, r18, OVERFLOW\n" " 133: GOTO_IF_Z r91, L12\n" " 134: GET_ALIAS r92, a5\n" " 135: NOT r93, r92\n" " 136: ORI r94, r92, 268435456\n" " 137: ANDI r95, r93, 268435456\n" " 138: SET_ALIAS a5, r94\n" " 139: GOTO_IF_Z r95, L13\n" " 140: ORI r96, r94, -2147483648\n" " 141: SET_ALIAS a5, r96\n" " 142: LABEL L13\n" " 143: LABEL L12\n" " 144: FTESTEXC r97, r18, UNDERFLOW\n" " 145: GOTO_IF_Z r97, L2\n" " 146: GET_ALIAS r98, a5\n" " 147: NOT r99, r98\n" " 148: ORI r100, r98, 134217728\n" " 149: ANDI r101, r99, 134217728\n" " 150: SET_ALIAS a5, r100\n" " 151: GOTO_IF_Z r101, L14\n" " 152: ORI r102, r100, -2147483648\n" " 153: SET_ALIAS a5, r102\n" " 154: LABEL L14\n" " 155: LABEL L2\n" " 156: LOAD_IMM r103, 4\n" " 157: SET_ALIAS a1, r103\n" " 158: RETURN r1\n" "\n" "Alias 1: int32 @ 964(r1)\n" "Alias 2: float64 @ 400(r1)\n" "Alias 3: float64 @ 416(r1)\n" "Alias 4: float64 @ 432(r1)\n" "Alias 5: int32 @ 944(r1)\n" "\n" "Block 0: --> [0,10] --> 1,2\n" "Block 1: 0 --> [11,18] --> 2\n" "Block 2: 1,0 --> [19,25] --> 3,16\n" "Block 3: 2 --> [26,30] --> 4,5\n" "Block 4: 3 --> [31,31] --> 5,12\n" "Block 5: 4,3 --> [32,37] --> 6,7\n" "Block 6: 5 --> [38,38] --> 7,12\n" "Block 7: 6,5 --> [39,44] --> 8,9\n" "Block 8: 7 --> [45,46] --> 9\n" "Block 9: 8,7 --> [47,49] --> 10,11\n" "Block 10: 9 --> [50,56] --> 28\n" "Block 11: 9 --> [57,66] --> 28\n" "Block 12: 4,6 --> [67,72] --> 13,14\n" "Block 13: 12 --> [73,74] --> 14\n" "Block 14: 13,12 --> [75,77] --> 15,16\n" "Block 15: 14 --> [78,84] --> 28\n" "Block 16: 2,14 --> [85,121] --> 17,20\n" "Block 17: 16 --> [122,127] --> 18,19\n" "Block 18: 17 --> [128,129] --> 19\n" "Block 19: 18,17 --> [130,130] --> 20\n" "Block 20: 19,16 --> [131,133] --> 21,24\n" "Block 21: 20 --> [134,139] --> 22,23\n" "Block 22: 21 --> [140,141] --> 23\n" "Block 23: 22,21 --> [142,142] --> 24\n" "Block 24: 23,20 --> [143,145] --> 25,28\n" "Block 25: 24 --> [146,151] --> 26,27\n" "Block 26: 25 --> [152,153] --> 27\n" "Block 27: 26,25 --> [154,154] --> 28\n" "Block 28: 27,10,11,15,24 --> [155,158] --> \n" ; #include "tests/rtl-disasm-test.i"