/* * 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,0x20,0x10,0x30, // fres f1,f2 }; 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: FGETSTATE r4\n" " 4: FCMP r5, r3, r3, UN\n" " 5: FCVT r6, r3\n" " 6: SET_ALIAS a5, r6\n" " 7: GOTO_IF_Z r5, L1\n" " 8: BITCAST r7, r3\n" " 9: BFEXT r8, r7, 51, 1\n" " 10: GOTO_IF_NZ r8, L1\n" " 11: BITCAST r9, r6\n" " 12: XORI r10, r9, 4194304\n" " 13: BITCAST r11, r10\n" " 14: SET_ALIAS a5, r11\n" " 15: LABEL L1\n" " 16: GET_ALIAS r12, a5\n" " 17: FSETSTATE r4\n" " 18: GET_ALIAS r13, a4\n" " 19: BITCAST r14, r12\n" " 20: ANDI r15, r14, -2147483648\n" " 21: BFEXT r16, r14, 0, 23\n" " 22: SET_ALIAS a8, r16\n" " 23: BFEXT r17, r14, 23, 8\n" " 24: SET_ALIAS a7, r17\n" " 25: GOTO_IF_Z r17, L5\n" " 26: SEQI r18, r17, 255\n" " 27: GOTO_IF_NZ r18, L6\n" " 28: GOTO L7\n" " 29: LABEL L6\n" " 30: GOTO_IF_NZ r16, L8\n" " 31: BITCAST r19, r15\n" " 32: SET_ALIAS a6, r19\n" " 33: LOAD_IMM r20, 2\n" " 34: LOAD_IMM r21, 18\n" " 35: SELECT r22, r21, r20, r15\n" " 36: GET_ALIAS r23, a4\n" " 37: BFINS r24, r23, r22, 12, 7\n" " 38: SET_ALIAS a4, r24\n" " 39: GOTO L3\n" " 40: LABEL L8\n" " 41: ANDI r25, r16, 4194304\n" " 42: GOTO_IF_Z r25, L9\n" " 43: SET_ALIAS a6, r12\n" " 44: LOAD_IMM r26, 17\n" " 45: GET_ALIAS r27, a4\n" " 46: BFINS r28, r27, r26, 12, 7\n" " 47: SET_ALIAS a4, r28\n" " 48: GOTO L3\n" " 49: LABEL L9\n" " 50: GET_ALIAS r29, a4\n" " 51: NOT r30, r29\n" " 52: ORI r31, r29, 16777216\n" " 53: ANDI r32, r30, 16777216\n" " 54: SET_ALIAS a4, r31\n" " 55: GOTO_IF_Z r32, L10\n" " 56: ORI r33, r31, -2147483648\n" " 57: SET_ALIAS a4, r33\n" " 58: LABEL L10\n" " 59: ANDI r34, r13, 128\n" " 60: GOTO_IF_NZ r34, L4\n" " 61: ORI r35, r14, 4194304\n" " 62: BITCAST r36, r35\n" " 63: SET_ALIAS a6, r36\n" " 64: LOAD_IMM r37, 17\n" " 65: GET_ALIAS r38, a4\n" " 66: BFINS r39, r38, r37, 12, 7\n" " 67: SET_ALIAS a4, r39\n" " 68: GOTO L3\n" " 69: LABEL L5\n" " 70: GOTO_IF_NZ r16, L11\n" " 71: GET_ALIAS r40, a4\n" " 72: NOT r41, r40\n" " 73: ORI r42, r40, 67108864\n" " 74: ANDI r43, r41, 67108864\n" " 75: SET_ALIAS a4, r42\n" " 76: GOTO_IF_Z r43, L12\n" " 77: ORI r44, r42, -2147483648\n" " 78: SET_ALIAS a4, r44\n" " 79: LABEL L12\n" " 80: ANDI r45, r13, 16\n" " 81: GOTO_IF_NZ r45, L4\n" " 82: ORI r46, r15, 2139095040\n" " 83: BITCAST r47, r46\n" " 84: SET_ALIAS a6, r47\n" " 85: LOAD_IMM r48, 5\n" " 86: LOAD_IMM r49, 9\n" " 87: SELECT r50, r49, r48, r15\n" " 88: GET_ALIAS r51, a4\n" " 89: BFINS r52, r51, r50, 12, 7\n" " 90: SET_ALIAS a4, r52\n" " 91: GOTO L3\n" " 92: LABEL L11\n" " 93: SLTUI r53, r16, 2097152\n" " 94: GOTO_IF_Z r53, L13\n" " 95: ORI r54, r15, 2139095039\n" " 96: BITCAST r55, r54\n" " 97: SET_ALIAS a6, r55\n" " 98: GET_ALIAS r56, a4\n" " 99: NOT r57, r56\n" " 100: ORI r58, r56, 268435456\n" " 101: ANDI r59, r57, 268435456\n" " 102: SET_ALIAS a4, r58\n" " 103: GOTO_IF_Z r59, L14\n" " 104: ORI r60, r58, -2147483648\n" " 105: SET_ALIAS a4, r60\n" " 106: LABEL L14\n" " 107: LOAD_IMM r61, 36\n" " 108: LOAD_IMM r62, 40\n" " 109: SELECT r63, r62, r61, r15\n" " 110: GET_ALIAS r64, a4\n" " 111: BFINS r65, r64, r63, 12, 7\n" " 112: SET_ALIAS a4, r65\n" " 113: GOTO L3\n" " 114: LABEL L13\n" " 115: SLLI r66, r16, 1\n" " 116: SET_ALIAS a8, r66\n" " 117: ANDI r67, r66, 8388608\n" " 118: GOTO_IF_NZ r67, L15\n" " 119: LOAD_IMM r68, -1\n" " 120: SET_ALIAS a7, r68\n" " 121: SLLI r69, r66, 1\n" " 122: SET_ALIAS a8, r69\n" " 123: LABEL L15\n" " 124: GET_ALIAS r70, a8\n" " 125: ANDI r71, r70, 8388607\n" " 126: SET_ALIAS a8, r71\n" " 127: LABEL L7\n" " 128: LOAD r72, 1016(r1)\n" " 129: GET_ALIAS r73, a8\n" " 130: SRLI r74, r73, 18\n" " 131: SLLI r75, r74, 2\n" " 132: LOAD_IMM r76, 253\n" " 133: GET_ALIAS r77, a7\n" " 134: SUB r78, r76, r77\n" " 135: SET_ALIAS a7, r78\n" " 136: ZCAST r79, r75\n" " 137: ADD r80, r72, r79\n" " 138: LOAD_U16 r81, 2(r80)\n" " 139: LOAD_U16 r82, 0(r80)\n" " 140: BFEXT r83, r73, 8, 10\n" " 141: MUL r84, r83, r81\n" " 142: SLLI r85, r82, 10\n" " 143: SUB r86, r85, r84\n" " 144: ANDI r87, r86, 1\n" " 145: SET_ALIAS a9, r87\n" " 146: SRLI r88, r86, 1\n" " 147: SET_ALIAS a8, r88\n" " 148: GOTO_IF_Z r78, L16\n" " 149: SLTSI r89, r78, 0\n" " 150: GOTO_IF_NZ r89, L17\n" " 151: LABEL L18\n" " 152: GET_ALIAS r90, a8\n" " 153: OR r91, r90, r15\n" " 154: GET_ALIAS r92, a7\n" " 155: SLLI r93, r92, 23\n" " 156: OR r94, r91, r93\n" " 157: BITCAST r95, r94\n" " 158: SET_ALIAS a6, r95\n" " 159: BITCAST r96, r95\n" " 160: SGTUI r97, r96, 0\n" " 161: SRLI r98, r96, 31\n" " 162: BFEXT r102, r96, 23, 8\n" " 163: SEQI r99, r102, 0\n" " 164: SEQI r100, r102, 255\n" " 165: SLLI r103, r96, 9\n" " 166: SEQI r101, r103, 0\n" " 167: AND r104, r99, r101\n" " 168: XORI r105, r101, 1\n" " 169: AND r106, r100, r105\n" " 170: AND r107, r99, r97\n" " 171: OR r108, r107, r106\n" " 172: OR r109, r104, r106\n" " 173: XORI r110, r109, 1\n" " 174: XORI r111, r98, 1\n" " 175: AND r112, r98, r110\n" " 176: AND r113, r111, r110\n" " 177: SLLI r114, r108, 4\n" " 178: SLLI r115, r112, 3\n" " 179: SLLI r116, r113, 2\n" " 180: SLLI r117, r104, 1\n" " 181: OR r118, r114, r115\n" " 182: OR r119, r116, r117\n" " 183: OR r120, r118, r100\n" " 184: OR r121, r120, r119\n" " 185: GET_ALIAS r122, a9\n" " 186: SLLI r123, r122, 5\n" " 187: GOTO_IF_Z r123, L19\n" " 188: GOTO_IF_NZ r93, L19\n" " 189: GET_ALIAS r124, a4\n" " 190: NOT r125, r124\n" " 191: ORI r126, r124, 134217728\n" " 192: ANDI r127, r125, 134217728\n" " 193: SET_ALIAS a4, r126\n" " 194: GOTO_IF_Z r127, L20\n" " 195: ORI r128, r126, -2147483648\n" " 196: SET_ALIAS a4, r128\n" " 197: LABEL L20\n" " 198: LABEL L19\n" " 199: OR r129, r123, r121\n" " 200: GET_ALIAS r130, a4\n" " 201: BFINS r131, r130, r129, 12, 7\n" " 202: SET_ALIAS a4, r131\n" " 203: GOTO L3\n" " 204: LABEL L17\n" " 205: LOAD_IMM r132, 0\n" " 206: SET_ALIAS a7, r132\n" " 207: GET_ALIAS r133, a8\n" " 208: GET_ALIAS r134, a9\n" " 209: ANDI r135, r133, 3\n" " 210: SGTUI r136, r135, 0\n" " 211: OR r137, r134, r136\n" " 212: SET_ALIAS a9, r137\n" " 213: ORI r138, r133, 8388608\n" " 214: SRLI r139, r138, 2\n" " 215: SET_ALIAS a8, r139\n" " 216: GOTO L18\n" " 217: LABEL L16\n" " 218: GET_ALIAS r140, a8\n" " 219: GET_ALIAS r141, a9\n" " 220: ANDI r142, r140, 1\n" " 221: OR r143, r141, r142\n" " 222: SET_ALIAS a9, r143\n" " 223: ORI r144, r140, 8388608\n" " 224: SRLI r145, r144, 1\n" " 225: SET_ALIAS a8, r145\n" " 226: GOTO L18\n" " 227: LABEL L4\n" " 228: GET_ALIAS r146, a4\n" " 229: BFEXT r147, r146, 12, 7\n" " 230: ANDI r148, r147, 31\n" " 231: GET_ALIAS r149, a4\n" " 232: BFINS r150, r149, r147, 12, 7\n" " 233: SET_ALIAS a4, r150\n" " 234: GOTO L2\n" " 235: LABEL L3\n" " 236: GET_ALIAS r151, a6\n" " 237: FCVT r152, r151\n" " 238: STORE 408(r1), r152\n" " 239: SET_ALIAS a2, r152\n" " 240: LABEL L2\n" " 241: LOAD_IMM r153, 4\n" " 242: SET_ALIAS a1, r153\n" " 243: RETURN r1\n" "\n" "Alias 1: int32 @ 964(r1)\n" "Alias 2: float64 @ 400(r1)\n" "Alias 3: float64 @ 416(r1)\n" "Alias 4: int32 @ 944(r1)\n" "Alias 5: float32, no bound storage\n" "Alias 6: float32, no bound storage\n" "Alias 7: int32, no bound storage\n" "Alias 8: int32, no bound storage\n" "Alias 9: int32, no bound storage\n" "\n" "Block 0: --> [0,7] --> 1,3\n" "Block 1: 0 --> [8,10] --> 2,3\n" "Block 2: 1 --> [11,14] --> 3\n" "Block 3: 2,0,1 --> [15,25] --> 4,14\n" "Block 4: 3 --> [26,27] --> 5,6\n" "Block 5: 4 --> [28,28] --> 26\n" "Block 6: 4 --> [29,30] --> 7,8\n" "Block 7: 6 --> [31,39] --> 37\n" "Block 8: 6 --> [40,42] --> 9,10\n" "Block 9: 8 --> [43,48] --> 37\n" "Block 10: 8 --> [49,55] --> 11,12\n" "Block 11: 10 --> [56,57] --> 12\n" "Block 12: 11,10 --> [58,60] --> 13,36\n" "Block 13: 12 --> [61,68] --> 37\n" "Block 14: 3 --> [69,70] --> 15,19\n" "Block 15: 14 --> [71,76] --> 16,17\n" "Block 16: 15 --> [77,78] --> 17\n" "Block 17: 16,15 --> [79,81] --> 18,36\n" "Block 18: 17 --> [82,91] --> 37\n" "Block 19: 14 --> [92,94] --> 20,23\n" "Block 20: 19 --> [95,103] --> 21,22\n" "Block 21: 20 --> [104,105] --> 22\n" "Block 22: 21,20 --> [106,113] --> 37\n" "Block 23: 19 --> [114,118] --> 24,25\n" "Block 24: 23 --> [119,122] --> 25\n" "Block 25: 24,23 --> [123,126] --> 26\n" "Block 26: 25,5 --> [127,148] --> 27,35\n" "Block 27: 26 --> [149,150] --> 28,34\n" "Block 28: 27,34,35 --> [151,187] --> 29,33\n" "Block 29: 28 --> [188,188] --> 30,33\n" "Block 30: 29 --> [189,194] --> 31,32\n" "Block 31: 30 --> [195,196] --> 32\n" "Block 32: 31,30 --> [197,197] --> 33\n" "Block 33: 32,28,29 --> [198,203] --> 37\n" "Block 34: 27 --> [204,216] --> 28\n" "Block 35: 26 --> [217,226] --> 28\n" "Block 36: 12,17 --> [227,234] --> 38\n" "Block 37: 7,9,13,18,22,33 --> [235,239] --> 38\n" "Block 38: 37,36 --> [240,243] --> \n" ; #include "tests/rtl-disasm-test.i"