/* * 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,0x18,0x2A, // ps_add f1,f2,f3 }; static const unsigned int guest_opt = 0; static const unsigned int common_opt = BINREC_OPT_NATIVE_IEEE_NAN; 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: VFCVT r6, r5\n" " 6: LOAD_IMM r7, 0x1000000\n" " 7: VEXTRACT r8, r6, 1\n" " 8: BITCAST r9, r8\n" " 9: SLLI r10, r9, 1\n" " 10: SEQ r11, r10, r7\n" " 11: GOTO_IF_NZ r11, L1\n" " 12: VEXTRACT r12, r6, 0\n" " 13: BITCAST r13, r12\n" " 14: SLLI r14, r13, 1\n" " 15: SEQ r15, r14, r7\n" " 16: GOTO_IF_Z r15, L2\n" " 17: LABEL L1\n" " 18: FGETSTATE r16\n" " 19: FSETROUND r17, r16, TRUNC\n" " 20: FSETSTATE r17\n" " 21: FADD r18, r3, r4\n" " 22: VFCVT r19, r18\n" " 23: FGETSTATE r20\n" " 24: FCOPYROUND r21, r20, r16\n" " 25: FSETSTATE r21\n" " 26: LABEL L2\n" " 27: FGETSTATE r22\n" " 28: FTESTEXC r23, r22, INVALID\n" " 29: GOTO_IF_Z r23, L3\n" " 30: GET_ALIAS r24, a2\n" " 31: FCLEAREXC r25, r22\n" " 32: FSETSTATE r25\n" " 33: VEXTRACT r26, r3, 0\n" " 34: VEXTRACT r27, r4, 0\n" " 35: FADD r28, r26, r27\n" " 36: FCVT r29, r28\n" " 37: GET_ALIAS r30, a5\n" " 38: FGETSTATE r31\n" " 39: FCLEAREXC r32, r31\n" " 40: FSETSTATE r32\n" " 41: FTESTEXC r33, r31, INVALID\n" " 42: GOTO_IF_Z r33, L5\n" " 43: BITCAST r34, r26\n" " 44: SLLI r35, r34, 13\n" " 45: BFEXT r36, r34, 51, 12\n" " 46: SEQI r37, r36, 4094\n" " 47: GOTO_IF_Z r37, L7\n" " 48: GOTO_IF_NZ r35, L6\n" " 49: LABEL L7\n" " 50: BITCAST r38, r27\n" " 51: SLLI r39, r38, 13\n" " 52: BFEXT r40, r38, 51, 12\n" " 53: SEQI r41, r40, 4094\n" " 54: GOTO_IF_Z r41, L8\n" " 55: GOTO_IF_NZ r39, L6\n" " 56: LABEL L8\n" " 57: NOT r42, r30\n" " 58: ORI r43, r30, 8388608\n" " 59: ANDI r44, r42, 8388608\n" " 60: SET_ALIAS a5, r43\n" " 61: GOTO_IF_Z r44, L9\n" " 62: ORI r45, r43, -2147483648\n" " 63: SET_ALIAS a5, r45\n" " 64: LABEL L9\n" " 65: GOTO L10\n" " 66: LABEL L6\n" " 67: NOT r46, r30\n" " 68: ORI r47, r30, 16777216\n" " 69: ANDI r48, r46, 16777216\n" " 70: SET_ALIAS a5, r47\n" " 71: GOTO_IF_Z r48, L11\n" " 72: ORI r49, r47, -2147483648\n" " 73: SET_ALIAS a5, r49\n" " 74: LABEL L11\n" " 75: LABEL L10\n" " 76: ANDI r50, r30, 128\n" " 77: GOTO_IF_Z r50, L5\n" " 78: GET_ALIAS r51, a5\n" " 79: BFEXT r52, r51, 12, 7\n" " 80: ANDI r53, r52, 31\n" " 81: GET_ALIAS r54, a5\n" " 82: BFINS r55, r54, r53, 12, 7\n" " 83: SET_ALIAS a5, r55\n" " 84: GOTO L4\n" " 85: LABEL L5\n" " 86: FCVT r56, r29\n" " 87: VBROADCAST r57, r56\n" " 88: SET_ALIAS a2, r57\n" " 89: BITCAST r58, r29\n" " 90: SGTUI r59, r58, 0\n" " 91: SRLI r60, r58, 31\n" " 92: BFEXT r64, r58, 23, 8\n" " 93: SEQI r61, r64, 0\n" " 94: SEQI r62, r64, 255\n" " 95: SLLI r65, r58, 9\n" " 96: SEQI r63, r65, 0\n" " 97: AND r66, r61, r63\n" " 98: XORI r67, r63, 1\n" " 99: AND r68, r62, r67\n" " 100: AND r69, r61, r59\n" " 101: OR r70, r69, r68\n" " 102: OR r71, r66, r68\n" " 103: XORI r72, r71, 1\n" " 104: XORI r73, r60, 1\n" " 105: AND r74, r60, r72\n" " 106: AND r75, r73, r72\n" " 107: SLLI r76, r70, 4\n" " 108: SLLI r77, r74, 3\n" " 109: SLLI r78, r75, 2\n" " 110: SLLI r79, r66, 1\n" " 111: OR r80, r76, r77\n" " 112: OR r81, r78, r79\n" " 113: OR r82, r80, r62\n" " 114: OR r83, r82, r81\n" " 115: FTESTEXC r84, r31, INEXACT\n" " 116: SLLI r85, r84, 5\n" " 117: OR r86, r83, r85\n" " 118: GET_ALIAS r87, a5\n" " 119: BFINS r88, r87, r86, 12, 7\n" " 120: SET_ALIAS a5, r88\n" " 121: GOTO_IF_Z r84, L12\n" " 122: GET_ALIAS r89, a5\n" " 123: NOT r90, r89\n" " 124: ORI r91, r89, 33554432\n" " 125: ANDI r92, r90, 33554432\n" " 126: SET_ALIAS a5, r91\n" " 127: GOTO_IF_Z r92, L13\n" " 128: ORI r93, r91, -2147483648\n" " 129: SET_ALIAS a5, r93\n" " 130: LABEL L13\n" " 131: LABEL L12\n" " 132: FTESTEXC r94, r31, OVERFLOW\n" " 133: GOTO_IF_Z r94, L14\n" " 134: GET_ALIAS r95, a5\n" " 135: NOT r96, r95\n" " 136: ORI r97, r95, 268435456\n" " 137: ANDI r98, r96, 268435456\n" " 138: SET_ALIAS a5, r97\n" " 139: GOTO_IF_Z r98, L15\n" " 140: ORI r99, r97, -2147483648\n" " 141: SET_ALIAS a5, r99\n" " 142: LABEL L15\n" " 143: LABEL L14\n" " 144: FTESTEXC r100, r31, UNDERFLOW\n" " 145: GOTO_IF_Z r100, L4\n" " 146: GET_ALIAS r101, a5\n" " 147: NOT r102, r101\n" " 148: ORI r103, r101, 134217728\n" " 149: ANDI r104, r102, 134217728\n" " 150: SET_ALIAS a5, r103\n" " 151: GOTO_IF_Z r104, L16\n" " 152: ORI r105, r103, -2147483648\n" " 153: SET_ALIAS a5, r105\n" " 154: LABEL L16\n" " 155: LABEL L4\n" " 156: GET_ALIAS r106, a2\n" " 157: VEXTRACT r107, r106, 0\n" " 158: GET_ALIAS r108, a5\n" " 159: BFEXT r109, r108, 12, 7\n" " 160: VEXTRACT r110, r3, 1\n" " 161: VEXTRACT r111, r4, 1\n" " 162: FADD r112, r110, r111\n" " 163: FCVT r113, r112\n" " 164: GET_ALIAS r114, a5\n" " 165: FGETSTATE r115\n" " 166: FCLEAREXC r116, r115\n" " 167: FSETSTATE r116\n" " 168: FTESTEXC r117, r115, INVALID\n" " 169: GOTO_IF_Z r117, L18\n" " 170: BITCAST r118, r110\n" " 171: SLLI r119, r118, 13\n" " 172: BFEXT r120, r118, 51, 12\n" " 173: SEQI r121, r120, 4094\n" " 174: GOTO_IF_Z r121, L20\n" " 175: GOTO_IF_NZ r119, L19\n" " 176: LABEL L20\n" " 177: BITCAST r122, r111\n" " 178: SLLI r123, r122, 13\n" " 179: BFEXT r124, r122, 51, 12\n" " 180: SEQI r125, r124, 4094\n" " 181: GOTO_IF_Z r125, L21\n" " 182: GOTO_IF_NZ r123, L19\n" " 183: LABEL L21\n" " 184: NOT r126, r114\n" " 185: ORI r127, r114, 8388608\n" " 186: ANDI r128, r126, 8388608\n" " 187: SET_ALIAS a5, r127\n" " 188: GOTO_IF_Z r128, L22\n" " 189: ORI r129, r127, -2147483648\n" " 190: SET_ALIAS a5, r129\n" " 191: LABEL L22\n" " 192: GOTO L23\n" " 193: LABEL L19\n" " 194: NOT r130, r114\n" " 195: ORI r131, r114, 16777216\n" " 196: ANDI r132, r130, 16777216\n" " 197: SET_ALIAS a5, r131\n" " 198: GOTO_IF_Z r132, L24\n" " 199: ORI r133, r131, -2147483648\n" " 200: SET_ALIAS a5, r133\n" " 201: LABEL L24\n" " 202: LABEL L23\n" " 203: ANDI r134, r114, 128\n" " 204: GOTO_IF_Z r134, L18\n" " 205: GET_ALIAS r135, a5\n" " 206: BFEXT r136, r135, 12, 7\n" " 207: ANDI r137, r136, 31\n" " 208: GET_ALIAS r138, a5\n" " 209: BFINS r139, r138, r137, 12, 7\n" " 210: SET_ALIAS a5, r139\n" " 211: GOTO L17\n" " 212: LABEL L18\n" " 213: FCVT r140, r113\n" " 214: VBROADCAST r141, r140\n" " 215: SET_ALIAS a2, r141\n" " 216: BITCAST r142, r113\n" " 217: SGTUI r143, r142, 0\n" " 218: SRLI r144, r142, 31\n" " 219: BFEXT r148, r142, 23, 8\n" " 220: SEQI r145, r148, 0\n" " 221: SEQI r146, r148, 255\n" " 222: SLLI r149, r142, 9\n" " 223: SEQI r147, r149, 0\n" " 224: AND r150, r145, r147\n" " 225: XORI r151, r147, 1\n" " 226: AND r152, r146, r151\n" " 227: AND r153, r145, r143\n" " 228: OR r154, r153, r152\n" " 229: OR r155, r150, r152\n" " 230: XORI r156, r155, 1\n" " 231: XORI r157, r144, 1\n" " 232: AND r158, r144, r156\n" " 233: AND r159, r157, r156\n" " 234: SLLI r160, r154, 4\n" " 235: SLLI r161, r158, 3\n" " 236: SLLI r162, r159, 2\n" " 237: SLLI r163, r150, 1\n" " 238: OR r164, r160, r161\n" " 239: OR r165, r162, r163\n" " 240: OR r166, r164, r146\n" " 241: OR r167, r166, r165\n" " 242: FTESTEXC r168, r115, INEXACT\n" " 243: SLLI r169, r168, 5\n" " 244: OR r170, r167, r169\n" " 245: GET_ALIAS r171, a5\n" " 246: BFINS r172, r171, r170, 12, 7\n" " 247: SET_ALIAS a5, r172\n" " 248: GOTO_IF_Z r168, L25\n" " 249: GET_ALIAS r173, a5\n" " 250: NOT r174, r173\n" " 251: ORI r175, r173, 33554432\n" " 252: ANDI r176, r174, 33554432\n" " 253: SET_ALIAS a5, r175\n" " 254: GOTO_IF_Z r176, L26\n" " 255: ORI r177, r175, -2147483648\n" " 256: SET_ALIAS a5, r177\n" " 257: LABEL L26\n" " 258: LABEL L25\n" " 259: FTESTEXC r178, r115, OVERFLOW\n" " 260: GOTO_IF_Z r178, L27\n" " 261: GET_ALIAS r179, a5\n" " 262: NOT r180, r179\n" " 263: ORI r181, r179, 268435456\n" " 264: ANDI r182, r180, 268435456\n" " 265: SET_ALIAS a5, r181\n" " 266: GOTO_IF_Z r182, L28\n" " 267: ORI r183, r181, -2147483648\n" " 268: SET_ALIAS a5, r183\n" " 269: LABEL L28\n" " 270: LABEL L27\n" " 271: FTESTEXC r184, r115, UNDERFLOW\n" " 272: GOTO_IF_Z r184, L17\n" " 273: GET_ALIAS r185, a5\n" " 274: NOT r186, r185\n" " 275: ORI r187, r185, 134217728\n" " 276: ANDI r188, r186, 134217728\n" " 277: SET_ALIAS a5, r187\n" " 278: GOTO_IF_Z r188, L29\n" " 279: ORI r189, r187, -2147483648\n" " 280: SET_ALIAS a5, r189\n" " 281: LABEL L29\n" " 282: LABEL L17\n" " 283: GET_ALIAS r190, a2\n" " 284: VEXTRACT r191, r190, 0\n" " 285: GET_ALIAS r192, a5\n" " 286: BFEXT r193, r192, 12, 7\n" " 287: ANDI r194, r193, 32\n" " 288: OR r195, r109, r194\n" " 289: GET_ALIAS r196, a5\n" " 290: BFINS r197, r196, r195, 12, 7\n" " 291: SET_ALIAS a5, r197\n" " 292: GET_ALIAS r198, a5\n" " 293: ANDI r199, r198, 128\n" " 294: GOTO_IF_Z r199, L30\n" " 295: SET_ALIAS a2, r24\n" " 296: GOTO L31\n" " 297: LABEL L30\n" " 298: VBUILD2 r200, r107, r191\n" " 299: SET_ALIAS a2, r200\n" " 300: GOTO L31\n" " 301: LABEL L3\n" " 302: GET_ALIAS r201, a5\n" " 303: FGETSTATE r202\n" " 304: FCLEAREXC r203, r202\n" " 305: FSETSTATE r203\n" " 306: VFCVT r204, r6\n" " 307: SET_ALIAS a2, r204\n" " 308: VEXTRACT r205, r6, 0\n" " 309: BITCAST r206, r205\n" " 310: SGTUI r207, r206, 0\n" " 311: SRLI r208, r206, 31\n" " 312: BFEXT r212, r206, 23, 8\n" " 313: SEQI r209, r212, 0\n" " 314: SEQI r210, r212, 255\n" " 315: SLLI r213, r206, 9\n" " 316: SEQI r211, r213, 0\n" " 317: AND r214, r209, r211\n" " 318: XORI r215, r211, 1\n" " 319: AND r216, r210, r215\n" " 320: AND r217, r209, r207\n" " 321: OR r218, r217, r216\n" " 322: OR r219, r214, r216\n" " 323: XORI r220, r219, 1\n" " 324: XORI r221, r208, 1\n" " 325: AND r222, r208, r220\n" " 326: AND r223, r221, r220\n" " 327: SLLI r224, r218, 4\n" " 328: SLLI r225, r222, 3\n" " 329: SLLI r226, r223, 2\n" " 330: SLLI r227, r214, 1\n" " 331: OR r228, r224, r225\n" " 332: OR r229, r226, r227\n" " 333: OR r230, r228, r210\n" " 334: OR r231, r230, r229\n" " 335: FTESTEXC r232, r202, INEXACT\n" " 336: SLLI r233, r232, 5\n" " 337: OR r234, r231, r233\n" " 338: GET_ALIAS r235, a5\n" " 339: BFINS r236, r235, r234, 12, 7\n" " 340: SET_ALIAS a5, r236\n" " 341: GOTO_IF_Z r232, L33\n" " 342: GET_ALIAS r237, a5\n" " 343: NOT r238, r237\n" " 344: ORI r239, r237, 33554432\n" " 345: ANDI r240, r238, 33554432\n" " 346: SET_ALIAS a5, r239\n" " 347: GOTO_IF_Z r240, L34\n" " 348: ORI r241, r239, -2147483648\n" " 349: SET_ALIAS a5, r241\n" " 350: LABEL L34\n" " 351: LABEL L33\n" " 352: FTESTEXC r242, r202, OVERFLOW\n" " 353: GOTO_IF_Z r242, L35\n" " 354: GET_ALIAS r243, a5\n" " 355: NOT r244, r243\n" " 356: ORI r245, r243, 268435456\n" " 357: ANDI r246, r244, 268435456\n" " 358: SET_ALIAS a5, r245\n" " 359: GOTO_IF_Z r246, L36\n" " 360: ORI r247, r245, -2147483648\n" " 361: SET_ALIAS a5, r247\n" " 362: LABEL L36\n" " 363: LABEL L35\n" " 364: FTESTEXC r248, r202, UNDERFLOW\n" " 365: GOTO_IF_Z r248, L32\n" " 366: GET_ALIAS r249, a5\n" " 367: NOT r250, r249\n" " 368: ORI r251, r249, 134217728\n" " 369: ANDI r252, r250, 134217728\n" " 370: SET_ALIAS a5, r251\n" " 371: GOTO_IF_Z r252, L37\n" " 372: ORI r253, r251, -2147483648\n" " 373: SET_ALIAS a5, r253\n" " 374: LABEL L37\n" " 375: LABEL L32\n" " 376: LABEL L31\n" " 377: LOAD_IMM r254, 4\n" " 378: SET_ALIAS a1, r254\n" " 379: 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: int32 @ 944(r1)\n" "\n" "Block 0: --> [0,11] --> 1,2\n" "Block 1: 0 --> [12,16] --> 2,3\n" "Block 2: 1,0 --> [17,25] --> 3\n" "Block 3: 2,1 --> [26,29] --> 4,57\n" "Block 4: 3 --> [30,42] --> 5,17\n" "Block 5: 4 --> [43,47] --> 6,7\n" "Block 6: 5 --> [48,48] --> 7,12\n" "Block 7: 6,5 --> [49,54] --> 8,9\n" "Block 8: 7 --> [55,55] --> 9,12\n" "Block 9: 8,7 --> [56,61] --> 10,11\n" "Block 10: 9 --> [62,63] --> 11\n" "Block 11: 10,9 --> [64,65] --> 15\n" "Block 12: 6,8 --> [66,71] --> 13,14\n" "Block 13: 12 --> [72,73] --> 14\n" "Block 14: 13,12 --> [74,74] --> 15\n" "Block 15: 14,11 --> [75,77] --> 16,17\n" "Block 16: 15 --> [78,84] --> 29\n" "Block 17: 4,15 --> [85,121] --> 18,21\n" "Block 18: 17 --> [122,127] --> 19,20\n" "Block 19: 18 --> [128,129] --> 20\n" "Block 20: 19,18 --> [130,130] --> 21\n" "Block 21: 20,17 --> [131,133] --> 22,25\n" "Block 22: 21 --> [134,139] --> 23,24\n" "Block 23: 22 --> [140,141] --> 24\n" "Block 24: 23,22 --> [142,142] --> 25\n" "Block 25: 24,21 --> [143,145] --> 26,29\n" "Block 26: 25 --> [146,151] --> 27,28\n" "Block 27: 26 --> [152,153] --> 28\n" "Block 28: 27,26 --> [154,154] --> 29\n" "Block 29: 28,16,25 --> [155,169] --> 30,42\n" "Block 30: 29 --> [170,174] --> 31,32\n" "Block 31: 30 --> [175,175] --> 32,37\n" "Block 32: 31,30 --> [176,181] --> 33,34\n" "Block 33: 32 --> [182,182] --> 34,37\n" "Block 34: 33,32 --> [183,188] --> 35,36\n" "Block 35: 34 --> [189,190] --> 36\n" "Block 36: 35,34 --> [191,192] --> 40\n" "Block 37: 31,33 --> [193,198] --> 38,39\n" "Block 38: 37 --> [199,200] --> 39\n" "Block 39: 38,37 --> [201,201] --> 40\n" "Block 40: 39,36 --> [202,204] --> 41,42\n" "Block 41: 40 --> [205,211] --> 54\n" "Block 42: 29,40 --> [212,248] --> 43,46\n" "Block 43: 42 --> [249,254] --> 44,45\n" "Block 44: 43 --> [255,256] --> 45\n" "Block 45: 44,43 --> [257,257] --> 46\n" "Block 46: 45,42 --> [258,260] --> 47,50\n" "Block 47: 46 --> [261,266] --> 48,49\n" "Block 48: 47 --> [267,268] --> 49\n" "Block 49: 48,47 --> [269,269] --> 50\n" "Block 50: 49,46 --> [270,272] --> 51,54\n" "Block 51: 50 --> [273,278] --> 52,53\n" "Block 52: 51 --> [279,280] --> 53\n" "Block 53: 52,51 --> [281,281] --> 54\n" "Block 54: 53,41,50 --> [282,294] --> 55,56\n" "Block 55: 54 --> [295,296] --> 70\n" "Block 56: 54 --> [297,300] --> 70\n" "Block 57: 3 --> [301,341] --> 58,61\n" "Block 58: 57 --> [342,347] --> 59,60\n" "Block 59: 58 --> [348,349] --> 60\n" "Block 60: 59,58 --> [350,350] --> 61\n" "Block 61: 60,57 --> [351,353] --> 62,65\n" "Block 62: 61 --> [354,359] --> 63,64\n" "Block 63: 62 --> [360,361] --> 64\n" "Block 64: 63,62 --> [362,362] --> 65\n" "Block 65: 64,61 --> [363,365] --> 66,69\n" "Block 66: 65 --> [366,371] --> 67,68\n" "Block 67: 66 --> [372,373] --> 68\n" "Block 68: 67,66 --> [374,374] --> 69\n" "Block 69: 68,65 --> [375,375] --> 70\n" "Block 70: 69,55,56 --> [376,379] --> \n" ; #include "tests/rtl-disasm-test.i"