/* * 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[] = { 0xFC,0x20,0x10,0x34, // frsqrte 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: GET_ALIAS r4, a4\n" " 4: BITCAST r5, r3\n" " 5: SRLI r6, r5, 32\n" " 6: ZCAST r7, r6\n" " 7: LOAD_IMM r8, 0x8000000000000000\n" " 8: AND r9, r5, r8\n" " 9: BFEXT r10, r7, 0, 20\n" " 10: SET_ALIAS a7, r10\n" " 11: BFEXT r11, r7, 20, 11\n" " 12: SET_ALIAS a6, r11\n" " 13: GOTO_IF_Z r11, L4\n" " 14: SEQI r12, r11, 2047\n" " 15: GOTO_IF_NZ r12, L5\n" " 16: GOTO_IF_NZ r9, L6\n" " 17: GOTO L7\n" " 18: LABEL L5\n" " 19: BFEXT r13, r5, 0, 52\n" " 20: GOTO_IF_NZ r13, L8\n" " 21: GOTO_IF_NZ r9, L6\n" " 22: LOAD_IMM r14, 0.0\n" " 23: SET_ALIAS a5, r14\n" " 24: LOAD_IMM r15, 2\n" " 25: GET_ALIAS r16, a4\n" " 26: BFINS r17, r16, r15, 12, 7\n" " 27: SET_ALIAS a4, r17\n" " 28: GOTO L2\n" " 29: LABEL L8\n" " 30: ANDI r18, r10, 524288\n" " 31: GOTO_IF_Z r18, L9\n" " 32: SET_ALIAS a5, r3\n" " 33: LOAD_IMM r19, 17\n" " 34: GET_ALIAS r20, a4\n" " 35: BFINS r21, r20, r19, 12, 7\n" " 36: SET_ALIAS a4, r21\n" " 37: GOTO L2\n" " 38: LABEL L9\n" " 39: GET_ALIAS r22, a4\n" " 40: NOT r23, r22\n" " 41: ORI r24, r22, 16777216\n" " 42: ANDI r25, r23, 16777216\n" " 43: SET_ALIAS a4, r24\n" " 44: GOTO_IF_Z r25, L10\n" " 45: ORI r26, r24, -2147483648\n" " 46: SET_ALIAS a4, r26\n" " 47: LABEL L10\n" " 48: ANDI r27, r4, 128\n" " 49: GOTO_IF_NZ r27, L3\n" " 50: LOAD_IMM r28, 0x8000000000000\n" " 51: OR r29, r5, r28\n" " 52: BITCAST r30, r29\n" " 53: SET_ALIAS a5, r30\n" " 54: LOAD_IMM r31, 17\n" " 55: GET_ALIAS r32, a4\n" " 56: BFINS r33, r32, r31, 12, 7\n" " 57: SET_ALIAS a4, r33\n" " 58: GOTO L2\n" " 59: LABEL L4\n" " 60: BFEXT r34, r5, 0, 52\n" " 61: GOTO_IF_NZ r34, L11\n" " 62: GET_ALIAS r35, a4\n" " 63: NOT r36, r35\n" " 64: ORI r37, r35, 67108864\n" " 65: ANDI r38, r36, 67108864\n" " 66: SET_ALIAS a4, r37\n" " 67: GOTO_IF_Z r38, L12\n" " 68: ORI r39, r37, -2147483648\n" " 69: SET_ALIAS a4, r39\n" " 70: LABEL L12\n" " 71: ANDI r40, r4, 16\n" " 72: GOTO_IF_NZ r40, L3\n" " 73: LOAD_IMM r41, 0x7FF0000000000000\n" " 74: OR r42, r9, r41\n" " 75: BITCAST r43, r42\n" " 76: SET_ALIAS a5, r43\n" " 77: LOAD_IMM r44, 5\n" " 78: LOAD_IMM r45, 9\n" " 79: SELECT r46, r45, r44, r9\n" " 80: GET_ALIAS r47, a4\n" " 81: BFINS r48, r47, r46, 12, 7\n" " 82: SET_ALIAS a4, r48\n" " 83: GOTO L2\n" " 84: LABEL L11\n" " 85: GOTO_IF_NZ r9, L6\n" " 86: CLZ r49, r34\n" " 87: ADDI r50, r49, -11\n" " 88: ADDI r51, r49, -12\n" " 89: SLL r52, r34, r50\n" " 90: NEG r53, r51\n" " 91: SET_ALIAS a6, r53\n" " 92: BFEXT r54, r52, 32, 20\n" " 93: ZCAST r55, r54\n" " 94: SET_ALIAS a7, r55\n" " 95: LABEL L7\n" " 96: LOAD r56, 1024(r1)\n" " 97: GET_ALIAS r57, a7\n" " 98: SRLI r58, r57, 16\n" " 99: SLLI r59, r58, 2\n" " 100: GET_ALIAS r60, a6\n" " 101: ANDI r61, r60, 1\n" " 102: XORI r62, r61, 1\n" " 103: SLLI r63, r62, 6\n" " 104: OR r64, r59, r63\n" " 105: LOAD_IMM r65, 3068\n" " 106: SUB r66, r65, r60\n" " 107: SRLI r67, r66, 1\n" " 108: ZCAST r68, r64\n" " 109: ADD r69, r56, r68\n" " 110: LOAD_U16 r70, 2(r69)\n" " 111: LOAD_U16 r71, 0(r69)\n" " 112: BFEXT r72, r57, 5, 11\n" " 113: MUL r73, r72, r70\n" " 114: SLLI r74, r71, 11\n" " 115: SUB r75, r74, r73\n" " 116: ZCAST r76, r75\n" " 117: ZCAST r77, r67\n" " 118: SLLI r78, r76, 26\n" " 119: SLLI r79, r77, 52\n" " 120: OR r80, r78, r9\n" " 121: OR r81, r80, r79\n" " 122: BITCAST r82, r81\n" " 123: SET_ALIAS a5, r82\n" " 124: BITCAST r83, r82\n" " 125: SGTUI r84, r83, 0\n" " 126: SLTSI r85, r83, 0\n" " 127: BFEXT r89, r83, 52, 11\n" " 128: SEQI r86, r89, 0\n" " 129: SEQI r87, r89, 2047\n" " 130: SLLI r90, r83, 12\n" " 131: SEQI r88, r90, 0\n" " 132: AND r91, r86, r88\n" " 133: XORI r92, r88, 1\n" " 134: AND r93, r87, r92\n" " 135: AND r94, r86, r84\n" " 136: OR r95, r94, r93\n" " 137: OR r96, r91, r93\n" " 138: XORI r97, r96, 1\n" " 139: XORI r98, r85, 1\n" " 140: AND r99, r85, r97\n" " 141: AND r100, r98, r97\n" " 142: SLLI r101, r95, 4\n" " 143: SLLI r102, r99, 3\n" " 144: SLLI r103, r100, 2\n" " 145: SLLI r104, r91, 1\n" " 146: OR r105, r101, r102\n" " 147: OR r106, r103, r104\n" " 148: OR r107, r105, r87\n" " 149: OR r108, r107, r106\n" " 150: GET_ALIAS r109, a4\n" " 151: BFINS r110, r109, r108, 12, 7\n" " 152: SET_ALIAS a4, r110\n" " 153: GOTO L2\n" " 154: LABEL L6\n" " 155: GET_ALIAS r111, a4\n" " 156: NOT r112, r111\n" " 157: ORI r113, r111, 512\n" " 158: ANDI r114, r112, 512\n" " 159: SET_ALIAS a4, r113\n" " 160: GOTO_IF_Z r114, L13\n" " 161: ORI r115, r113, -2147483648\n" " 162: SET_ALIAS a4, r115\n" " 163: LABEL L13\n" " 164: ANDI r116, r4, 128\n" " 165: GOTO_IF_NZ r116, L3\n" " 166: LOAD_IMM r117, 17\n" " 167: GET_ALIAS r118, a4\n" " 168: BFINS r119, r118, r117, 12, 7\n" " 169: SET_ALIAS a4, r119\n" " 170: LOAD_IMM r120, nan(0x8000000000000)\n" " 171: SET_ALIAS a5, r120\n" " 172: GOTO L2\n" " 173: LABEL L3\n" " 174: GET_ALIAS r121, a4\n" " 175: BFEXT r122, r121, 12, 7\n" " 176: ANDI r123, r122, 31\n" " 177: GET_ALIAS r124, a4\n" " 178: BFINS r125, r124, r123, 12, 7\n" " 179: SET_ALIAS a4, r125\n" " 180: GOTO L1\n" " 181: LABEL L2\n" " 182: GET_ALIAS r126, a5\n" " 183: SET_ALIAS a2, r126\n" " 184: LABEL L1\n" " 185: LOAD_IMM r127, 4\n" " 186: SET_ALIAS a1, r127\n" " 187: 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: float64, no bound storage\n" "Alias 6: int32, no bound storage\n" "Alias 7: int32, no bound storage\n" "\n" "Block 0: --> [0,13] --> 1,13\n" "Block 1: 0 --> [14,15] --> 2,4\n" "Block 2: 1 --> [16,16] --> 3,21\n" "Block 3: 2 --> [17,17] --> 20\n" "Block 4: 1 --> [18,20] --> 5,7\n" "Block 5: 4 --> [21,21] --> 6,21\n" "Block 6: 5 --> [22,28] --> 26\n" "Block 7: 4 --> [29,31] --> 8,9\n" "Block 8: 7 --> [32,37] --> 26\n" "Block 9: 7 --> [38,44] --> 10,11\n" "Block 10: 9 --> [45,46] --> 11\n" "Block 11: 10,9 --> [47,49] --> 12,25\n" "Block 12: 11 --> [50,58] --> 26\n" "Block 13: 0 --> [59,61] --> 14,18\n" "Block 14: 13 --> [62,67] --> 15,16\n" "Block 15: 14 --> [68,69] --> 16\n" "Block 16: 15,14 --> [70,72] --> 17,25\n" "Block 17: 16 --> [73,83] --> 26\n" "Block 18: 13 --> [84,85] --> 19,21\n" "Block 19: 18 --> [86,94] --> 20\n" "Block 20: 19,3 --> [95,153] --> 26\n" "Block 21: 2,5,18 --> [154,160] --> 22,23\n" "Block 22: 21 --> [161,162] --> 23\n" "Block 23: 22,21 --> [163,165] --> 24,25\n" "Block 24: 23 --> [166,172] --> 26\n" "Block 25: 11,16,23 --> [173,180] --> 27\n" "Block 26: 6,8,12,17,20,24 --> [181,183] --> 27\n" "Block 27: 26,25 --> [184,187] --> \n" ; #include "tests/rtl-disasm-test.i"