/* * 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[] = { 0x10,0x22,0x19,0x16, // ps_sum1 f1,f2,f4,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: VEXTRACT r4, r3, 0\n" " 4: GET_ALIAS r5, a4\n" " 5: VEXTRACT r6, r5, 1\n" " 6: GET_ALIAS r7, a5\n" " 7: FGETSTATE r8\n" " 8: VEXTRACT r9, r7, 0\n" " 9: FCMP r10, r9, r9, UN\n" " 10: FCVT r11, r9\n" " 11: SET_ALIAS a7, r11\n" " 12: GOTO_IF_Z r10, L1\n" " 13: BITCAST r12, r9\n" " 14: BFEXT r13, r12, 51, 1\n" " 15: GOTO_IF_NZ r13, L1\n" " 16: BITCAST r14, r11\n" " 17: XORI r15, r14, 4194304\n" " 18: BITCAST r16, r15\n" " 19: SET_ALIAS a7, r16\n" " 20: LABEL L1\n" " 21: GET_ALIAS r17, a7\n" " 22: FSETSTATE r8\n" " 23: FADD r18, r4, r6\n" " 24: FCVT r19, r18\n" " 25: LOAD_IMM r20, 0x1000000\n" " 26: BITCAST r21, r19\n" " 27: SLLI r22, r21, 1\n" " 28: SEQ r23, r22, r20\n" " 29: GOTO_IF_Z r23, L2\n" " 30: FGETSTATE r24\n" " 31: FSETROUND r25, r24, TRUNC\n" " 32: FSETSTATE r25\n" " 33: FADD r26, r4, r6\n" " 34: FCVT r27, r26\n" " 35: FGETSTATE r28\n" " 36: FCOPYROUND r29, r28, r24\n" " 37: FSETSTATE r29\n" " 38: LABEL L2\n" " 39: FGETSTATE r30\n" " 40: FTESTEXC r31, r30, INVALID\n" " 41: GOTO_IF_Z r31, L3\n" " 42: GET_ALIAS r32, a6\n" " 43: FGETSTATE r33\n" " 44: FCLEAREXC r34, r33\n" " 45: FSETSTATE r34\n" " 46: FTESTEXC r35, r33, INVALID\n" " 47: GOTO_IF_Z r35, L5\n" " 48: BITCAST r36, r4\n" " 49: SLLI r37, r36, 13\n" " 50: BFEXT r38, r36, 51, 12\n" " 51: SEQI r39, r38, 4094\n" " 52: GOTO_IF_Z r39, L7\n" " 53: GOTO_IF_NZ r37, L6\n" " 54: LABEL L7\n" " 55: BITCAST r40, r6\n" " 56: SLLI r41, r40, 13\n" " 57: BFEXT r42, r40, 51, 12\n" " 58: SEQI r43, r42, 4094\n" " 59: GOTO_IF_Z r43, L8\n" " 60: GOTO_IF_NZ r41, L6\n" " 61: LABEL L8\n" " 62: NOT r44, r32\n" " 63: ORI r45, r32, 8388608\n" " 64: ANDI r46, r44, 8388608\n" " 65: SET_ALIAS a6, r45\n" " 66: GOTO_IF_Z r46, L9\n" " 67: ORI r47, r45, -2147483648\n" " 68: SET_ALIAS a6, r47\n" " 69: LABEL L9\n" " 70: ANDI r48, r32, 128\n" " 71: GOTO_IF_Z r48, L10\n" " 72: GET_ALIAS r49, a6\n" " 73: BFEXT r50, r49, 12, 7\n" " 74: ANDI r51, r50, 31\n" " 75: GET_ALIAS r52, a6\n" " 76: BFINS r53, r52, r51, 12, 7\n" " 77: SET_ALIAS a6, r53\n" " 78: GOTO L4\n" " 79: LABEL L10\n" " 80: LOAD_IMM r54, nan(0x400000)\n" " 81: FCVT r55, r54\n" " 82: VBROADCAST r56, r55\n" " 83: SET_ALIAS a2, r56\n" " 84: LOAD_IMM r57, 17\n" " 85: GET_ALIAS r58, a6\n" " 86: BFINS r59, r58, r57, 12, 7\n" " 87: SET_ALIAS a6, r59\n" " 88: GOTO L4\n" " 89: LABEL L6\n" " 90: NOT r60, r32\n" " 91: ORI r61, r32, 16777216\n" " 92: ANDI r62, r60, 16777216\n" " 93: SET_ALIAS a6, r61\n" " 94: GOTO_IF_Z r62, L11\n" " 95: ORI r63, r61, -2147483648\n" " 96: SET_ALIAS a6, r63\n" " 97: LABEL L11\n" " 98: ANDI r64, r32, 128\n" " 99: GOTO_IF_Z r64, L5\n" " 100: GET_ALIAS r65, a6\n" " 101: BFEXT r66, r65, 12, 7\n" " 102: ANDI r67, r66, 31\n" " 103: GET_ALIAS r68, a6\n" " 104: BFINS r69, r68, r67, 12, 7\n" " 105: SET_ALIAS a6, r69\n" " 106: GOTO L4\n" " 107: LABEL L5\n" " 108: FCVT r70, r19\n" " 109: VBROADCAST r71, r70\n" " 110: SET_ALIAS a2, r71\n" " 111: BITCAST r72, r19\n" " 112: SGTUI r73, r72, 0\n" " 113: SRLI r74, r72, 31\n" " 114: BFEXT r78, r72, 23, 8\n" " 115: SEQI r75, r78, 0\n" " 116: SEQI r76, r78, 255\n" " 117: SLLI r79, r72, 9\n" " 118: SEQI r77, r79, 0\n" " 119: AND r80, r75, r77\n" " 120: XORI r81, r77, 1\n" " 121: AND r82, r76, r81\n" " 122: AND r83, r75, r73\n" " 123: OR r84, r83, r82\n" " 124: OR r85, r80, r82\n" " 125: XORI r86, r85, 1\n" " 126: XORI r87, r74, 1\n" " 127: AND r88, r74, r86\n" " 128: AND r89, r87, r86\n" " 129: SLLI r90, r84, 4\n" " 130: SLLI r91, r88, 3\n" " 131: SLLI r92, r89, 2\n" " 132: SLLI r93, r80, 1\n" " 133: OR r94, r90, r91\n" " 134: OR r95, r92, r93\n" " 135: OR r96, r94, r76\n" " 136: OR r97, r96, r95\n" " 137: FTESTEXC r98, r33, INEXACT\n" " 138: SLLI r99, r98, 5\n" " 139: OR r100, r97, r99\n" " 140: GET_ALIAS r101, a6\n" " 141: BFINS r102, r101, r100, 12, 7\n" " 142: SET_ALIAS a6, r102\n" " 143: GOTO_IF_Z r98, L12\n" " 144: GET_ALIAS r103, a6\n" " 145: NOT r104, r103\n" " 146: ORI r105, r103, 33554432\n" " 147: ANDI r106, r104, 33554432\n" " 148: SET_ALIAS a6, r105\n" " 149: GOTO_IF_Z r106, L13\n" " 150: ORI r107, r105, -2147483648\n" " 151: SET_ALIAS a6, r107\n" " 152: LABEL L13\n" " 153: LABEL L12\n" " 154: FTESTEXC r108, r33, OVERFLOW\n" " 155: GOTO_IF_Z r108, L14\n" " 156: GET_ALIAS r109, a6\n" " 157: NOT r110, r109\n" " 158: ORI r111, r109, 268435456\n" " 159: ANDI r112, r110, 268435456\n" " 160: SET_ALIAS a6, r111\n" " 161: GOTO_IF_Z r112, L15\n" " 162: ORI r113, r111, -2147483648\n" " 163: SET_ALIAS a6, r113\n" " 164: LABEL L15\n" " 165: LABEL L14\n" " 166: FTESTEXC r114, r33, UNDERFLOW\n" " 167: GOTO_IF_Z r114, L4\n" " 168: GET_ALIAS r115, a6\n" " 169: NOT r116, r115\n" " 170: ORI r117, r115, 134217728\n" " 171: ANDI r118, r116, 134217728\n" " 172: SET_ALIAS a6, r117\n" " 173: GOTO_IF_Z r118, L16\n" " 174: ORI r119, r117, -2147483648\n" " 175: SET_ALIAS a6, r119\n" " 176: LABEL L16\n" " 177: LABEL L4\n" " 178: GET_ALIAS r120, a6\n" " 179: ANDI r121, r120, 128\n" " 180: GOTO_IF_NZ r121, L17\n" " 181: FGETSTATE r122\n" " 182: GET_ALIAS r123, a2\n" " 183: VEXTRACT r124, r123, 0\n" " 184: FCMP r125, r17, r17, UN\n" " 185: FCVT r126, r17\n" " 186: SET_ALIAS a8, r126\n" " 187: GOTO_IF_Z r125, L18\n" " 188: BITCAST r127, r17\n" " 189: ANDI r128, r127, 4194304\n" " 190: GOTO_IF_NZ r128, L18\n" " 191: BITCAST r129, r126\n" " 192: LOAD_IMM r130, 0x8000000000000\n" " 193: XOR r131, r129, r130\n" " 194: BITCAST r132, r131\n" " 195: SET_ALIAS a8, r132\n" " 196: LABEL L18\n" " 197: GET_ALIAS r133, a8\n" " 198: FSETSTATE r122\n" " 199: VBUILD2 r134, r133, r124\n" " 200: SET_ALIAS a2, r134\n" " 201: GOTO L17\n" " 202: LABEL L3\n" " 203: VBUILD2 r135, r17, r19\n" " 204: GET_ALIAS r136, a6\n" " 205: FGETSTATE r137\n" " 206: FCLEAREXC r138, r137\n" " 207: FSETSTATE r138\n" " 208: FGETSTATE r139\n" " 209: VFCMP r140, r135, r135, UN\n" " 210: VFCVT r141, r135\n" " 211: SET_ALIAS a9, r141\n" " 212: GOTO_IF_Z r140, L20\n" " 213: VEXTRACT r142, r135, 0\n" " 214: VEXTRACT r143, r135, 1\n" " 215: SLLI r144, r140, 32\n" " 216: BITCAST r145, r142\n" " 217: BITCAST r146, r143\n" " 218: NOT r147, r145\n" " 219: NOT r148, r146\n" " 220: ANDI r149, r147, 4194304\n" " 221: ANDI r150, r148, 4194304\n" " 222: VEXTRACT r151, r141, 0\n" " 223: VEXTRACT r152, r141, 1\n" " 224: ZCAST r153, r149\n" " 225: ZCAST r154, r150\n" " 226: SLLI r155, r153, 29\n" " 227: SLLI r156, r154, 29\n" " 228: BITCAST r157, r151\n" " 229: BITCAST r158, r152\n" " 230: AND r159, r155, r144\n" " 231: AND r160, r156, r140\n" " 232: XOR r161, r157, r159\n" " 233: XOR r162, r158, r160\n" " 234: BITCAST r163, r161\n" " 235: BITCAST r164, r162\n" " 236: VBUILD2 r165, r163, r164\n" " 237: SET_ALIAS a9, r165\n" " 238: LABEL L20\n" " 239: GET_ALIAS r166, a9\n" " 240: FSETSTATE r139\n" " 241: SET_ALIAS a2, r166\n" " 242: VEXTRACT r167, r135, 1\n" " 243: BITCAST r168, r167\n" " 244: SGTUI r169, r168, 0\n" " 245: SRLI r170, r168, 31\n" " 246: BFEXT r174, r168, 23, 8\n" " 247: SEQI r171, r174, 0\n" " 248: SEQI r172, r174, 255\n" " 249: SLLI r175, r168, 9\n" " 250: SEQI r173, r175, 0\n" " 251: AND r176, r171, r173\n" " 252: XORI r177, r173, 1\n" " 253: AND r178, r172, r177\n" " 254: AND r179, r171, r169\n" " 255: OR r180, r179, r178\n" " 256: OR r181, r176, r178\n" " 257: XORI r182, r181, 1\n" " 258: XORI r183, r170, 1\n" " 259: AND r184, r170, r182\n" " 260: AND r185, r183, r182\n" " 261: SLLI r186, r180, 4\n" " 262: SLLI r187, r184, 3\n" " 263: SLLI r188, r185, 2\n" " 264: SLLI r189, r176, 1\n" " 265: OR r190, r186, r187\n" " 266: OR r191, r188, r189\n" " 267: OR r192, r190, r172\n" " 268: OR r193, r192, r191\n" " 269: FTESTEXC r194, r137, INEXACT\n" " 270: SLLI r195, r194, 5\n" " 271: OR r196, r193, r195\n" " 272: GET_ALIAS r197, a6\n" " 273: BFINS r198, r197, r196, 12, 7\n" " 274: SET_ALIAS a6, r198\n" " 275: GOTO_IF_Z r194, L21\n" " 276: GET_ALIAS r199, a6\n" " 277: NOT r200, r199\n" " 278: ORI r201, r199, 33554432\n" " 279: ANDI r202, r200, 33554432\n" " 280: SET_ALIAS a6, r201\n" " 281: GOTO_IF_Z r202, L22\n" " 282: ORI r203, r201, -2147483648\n" " 283: SET_ALIAS a6, r203\n" " 284: LABEL L22\n" " 285: LABEL L21\n" " 286: FTESTEXC r204, r137, OVERFLOW\n" " 287: GOTO_IF_Z r204, L23\n" " 288: GET_ALIAS r205, a6\n" " 289: NOT r206, r205\n" " 290: ORI r207, r205, 268435456\n" " 291: ANDI r208, r206, 268435456\n" " 292: SET_ALIAS a6, r207\n" " 293: GOTO_IF_Z r208, L24\n" " 294: ORI r209, r207, -2147483648\n" " 295: SET_ALIAS a6, r209\n" " 296: LABEL L24\n" " 297: LABEL L23\n" " 298: FTESTEXC r210, r137, UNDERFLOW\n" " 299: GOTO_IF_Z r210, L19\n" " 300: GET_ALIAS r211, a6\n" " 301: NOT r212, r211\n" " 302: ORI r213, r211, 134217728\n" " 303: ANDI r214, r212, 134217728\n" " 304: SET_ALIAS a6, r213\n" " 305: GOTO_IF_Z r214, L25\n" " 306: ORI r215, r213, -2147483648\n" " 307: SET_ALIAS a6, r215\n" " 308: LABEL L25\n" " 309: LABEL L19\n" " 310: LABEL L17\n" " 311: LOAD_IMM r216, 4\n" " 312: SET_ALIAS a1, r216\n" " 313: RETURN r1\n" "\n" "Alias 1: int32 @ 964(r1)\n" "Alias 2: float64[2] @ 400(r1)\n" "Alias 3: float64[2] @ 416(r1)\n" "Alias 4: float64[2] @ 432(r1)\n" "Alias 5: float64[2] @ 448(r1)\n" "Alias 6: int32 @ 944(r1)\n" "Alias 7: float32, no bound storage\n" "Alias 8: float64, no bound storage\n" "Alias 9: float64[2], no bound storage\n" "\n" "Block 0: --> [0,12] --> 1,3\n" "Block 1: 0 --> [13,15] --> 2,3\n" "Block 2: 1 --> [16,19] --> 3\n" "Block 3: 2,0,1 --> [20,29] --> 4,5\n" "Block 4: 3 --> [30,37] --> 5\n" "Block 5: 4,3 --> [38,41] --> 6,37\n" "Block 6: 5 --> [42,47] --> 7,20\n" "Block 7: 6 --> [48,52] --> 8,9\n" "Block 8: 7 --> [53,53] --> 9,16\n" "Block 9: 8,7 --> [54,59] --> 10,11\n" "Block 10: 9 --> [60,60] --> 11,16\n" "Block 11: 10,9 --> [61,66] --> 12,13\n" "Block 12: 11 --> [67,68] --> 13\n" "Block 13: 12,11 --> [69,71] --> 14,15\n" "Block 14: 13 --> [72,78] --> 32\n" "Block 15: 13 --> [79,88] --> 32\n" "Block 16: 8,10 --> [89,94] --> 17,18\n" "Block 17: 16 --> [95,96] --> 18\n" "Block 18: 17,16 --> [97,99] --> 19,20\n" "Block 19: 18 --> [100,106] --> 32\n" "Block 20: 6,18 --> [107,143] --> 21,24\n" "Block 21: 20 --> [144,149] --> 22,23\n" "Block 22: 21 --> [150,151] --> 23\n" "Block 23: 22,21 --> [152,152] --> 24\n" "Block 24: 23,20 --> [153,155] --> 25,28\n" "Block 25: 24 --> [156,161] --> 26,27\n" "Block 26: 25 --> [162,163] --> 27\n" "Block 27: 26,25 --> [164,164] --> 28\n" "Block 28: 27,24 --> [165,167] --> 29,32\n" "Block 29: 28 --> [168,173] --> 30,31\n" "Block 30: 29 --> [174,175] --> 31\n" "Block 31: 30,29 --> [176,176] --> 32\n" "Block 32: 31,14,15,19,28 --> [177,180] --> 33,52\n" "Block 33: 32 --> [181,187] --> 34,36\n" "Block 34: 33 --> [188,190] --> 35,36\n" "Block 35: 34 --> [191,195] --> 36\n" "Block 36: 35,33,34 --> [196,201] --> 52\n" "Block 37: 5 --> [202,212] --> 38,39\n" "Block 38: 37 --> [213,237] --> 39\n" "Block 39: 38,37 --> [238,275] --> 40,43\n" "Block 40: 39 --> [276,281] --> 41,42\n" "Block 41: 40 --> [282,283] --> 42\n" "Block 42: 41,40 --> [284,284] --> 43\n" "Block 43: 42,39 --> [285,287] --> 44,47\n" "Block 44: 43 --> [288,293] --> 45,46\n" "Block 45: 44 --> [294,295] --> 46\n" "Block 46: 45,44 --> [296,296] --> 47\n" "Block 47: 46,43 --> [297,299] --> 48,51\n" "Block 48: 47 --> [300,305] --> 49,50\n" "Block 49: 48 --> [306,307] --> 50\n" "Block 50: 49,48 --> [308,308] --> 51\n" "Block 51: 50,47 --> [309,309] --> 52\n" "Block 52: 51,32,36 --> [310,313] --> \n" ; #include "tests/rtl-disasm-test.i"