1static constexpr uint8_t expected_asm_kThumb2[] = { 2 0x2D, 0xE9, 0xE0, 0x4D, 0x2D, 0xED, 0x10, 0x8A, 0x89, 0xB0, 0x00, 0x90, 3 0xCD, 0xF8, 0x84, 0x10, 0x8D, 0xED, 0x22, 0x0A, 0xCD, 0xF8, 0x8C, 0x20, 4 0xCD, 0xF8, 0x90, 0x30, 0x88, 0xB0, 0x08, 0xB0, 0x09, 0xB0, 0xBD, 0xEC, 5 0x10, 0x8A, 0xBD, 0xE8, 0xE0, 0x8D, 6}; 7static constexpr uint8_t expected_cfi_kThumb2[] = { 8 0x44, 0x0E, 0x1C, 0x85, 0x07, 0x86, 0x06, 0x87, 0x05, 0x88, 0x04, 0x8A, 9 0x03, 0x8B, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x5C, 0x05, 0x50, 0x17, 0x05, 10 0x51, 0x16, 0x05, 0x52, 0x15, 0x05, 0x53, 0x14, 0x05, 0x54, 0x13, 0x05, 11 0x55, 0x12, 0x05, 0x56, 0x11, 0x05, 0x57, 0x10, 0x05, 0x58, 0x0F, 0x05, 12 0x59, 0x0E, 0x05, 0x5A, 0x0D, 0x05, 0x5B, 0x0C, 0x05, 0x5C, 0x0B, 0x05, 13 0x5D, 0x0A, 0x05, 0x5E, 0x09, 0x05, 0x5F, 0x08, 0x42, 0x0E, 0x80, 0x01, 14 0x54, 0x0E, 0xA0, 0x01, 0x42, 0x0E, 0x80, 0x01, 0x0A, 0x42, 0x0E, 0x5C, 15 0x44, 0x0E, 0x1C, 0x06, 0x50, 0x06, 0x51, 0x06, 0x52, 0x06, 0x53, 0x06, 16 0x54, 0x06, 0x55, 0x06, 0x56, 0x06, 0x57, 0x06, 0x58, 0x06, 0x59, 0x06, 17 0x5A, 0x06, 0x5B, 0x06, 0x5C, 0x06, 0x5D, 0x06, 0x5E, 0x06, 0x5F, 0x44, 18 0x0B, 0x0E, 0x80, 0x01, 19}; 20// 0x00000000: push {r5, r6, r7, r8, r10, r11, lr} 21// 0x00000004: .cfi_def_cfa_offset: 28 22// 0x00000004: .cfi_offset: r5 at cfa-28 23// 0x00000004: .cfi_offset: r6 at cfa-24 24// 0x00000004: .cfi_offset: r7 at cfa-20 25// 0x00000004: .cfi_offset: r8 at cfa-16 26// 0x00000004: .cfi_offset: r10 at cfa-12 27// 0x00000004: .cfi_offset: r11 at cfa-8 28// 0x00000004: .cfi_offset: r14 at cfa-4 29// 0x00000004: vpush.f32 {s16-s31} 30// 0x00000008: .cfi_def_cfa_offset: 92 31// 0x00000008: .cfi_offset_extended: r80 at cfa-92 32// 0x00000008: .cfi_offset_extended: r81 at cfa-88 33// 0x00000008: .cfi_offset_extended: r82 at cfa-84 34// 0x00000008: .cfi_offset_extended: r83 at cfa-80 35// 0x00000008: .cfi_offset_extended: r84 at cfa-76 36// 0x00000008: .cfi_offset_extended: r85 at cfa-72 37// 0x00000008: .cfi_offset_extended: r86 at cfa-68 38// 0x00000008: .cfi_offset_extended: r87 at cfa-64 39// 0x00000008: .cfi_offset_extended: r88 at cfa-60 40// 0x00000008: .cfi_offset_extended: r89 at cfa-56 41// 0x00000008: .cfi_offset_extended: r90 at cfa-52 42// 0x00000008: .cfi_offset_extended: r91 at cfa-48 43// 0x00000008: .cfi_offset_extended: r92 at cfa-44 44// 0x00000008: .cfi_offset_extended: r93 at cfa-40 45// 0x00000008: .cfi_offset_extended: r94 at cfa-36 46// 0x00000008: .cfi_offset_extended: r95 at cfa-32 47// 0x00000008: sub sp, sp, #36 48// 0x0000000a: .cfi_def_cfa_offset: 128 49// 0x0000000a: str r0, [sp, #0] 50// 0x0000000c: str.w r1, [sp, #132] 51// 0x00000010: vstr.f32 s0, [sp, #136] 52// 0x00000014: str.w r2, [sp, #140] 53// 0x00000018: str.w r3, [sp, #144] 54// 0x0000001c: sub sp, sp, #32 55// 0x0000001e: .cfi_def_cfa_offset: 160 56// 0x0000001e: add sp, sp, #32 57// 0x00000020: .cfi_def_cfa_offset: 128 58// 0x00000020: .cfi_remember_state 59// 0x00000020: add sp, sp, #36 60// 0x00000022: .cfi_def_cfa_offset: 92 61// 0x00000022: vpop.f32 {s16-s31} 62// 0x00000026: .cfi_def_cfa_offset: 28 63// 0x00000026: .cfi_restore_extended: r80 64// 0x00000026: .cfi_restore_extended: r81 65// 0x00000026: .cfi_restore_extended: r82 66// 0x00000026: .cfi_restore_extended: r83 67// 0x00000026: .cfi_restore_extended: r84 68// 0x00000026: .cfi_restore_extended: r85 69// 0x00000026: .cfi_restore_extended: r86 70// 0x00000026: .cfi_restore_extended: r87 71// 0x00000026: .cfi_restore_extended: r88 72// 0x00000026: .cfi_restore_extended: r89 73// 0x00000026: .cfi_restore_extended: r90 74// 0x00000026: .cfi_restore_extended: r91 75// 0x00000026: .cfi_restore_extended: r92 76// 0x00000026: .cfi_restore_extended: r93 77// 0x00000026: .cfi_restore_extended: r94 78// 0x00000026: .cfi_restore_extended: r95 79// 0x00000026: pop {r5, r6, r7, r8, r10, r11, pc} 80// 0x0000002a: .cfi_restore_state 81// 0x0000002a: .cfi_def_cfa_offset: 128 82 83static constexpr uint8_t expected_asm_kArm64[] = { 84 0xFF, 0x03, 0x03, 0xD1, 0xF3, 0x53, 0x06, 0xA9, 0xF5, 0x5B, 0x07, 0xA9, 85 0xF7, 0x63, 0x08, 0xA9, 0xF9, 0x6B, 0x09, 0xA9, 0xFB, 0x73, 0x0A, 0xA9, 86 0xFD, 0x7B, 0x0B, 0xA9, 0xE8, 0x27, 0x02, 0x6D, 0xEA, 0x2F, 0x03, 0x6D, 87 0xEC, 0x37, 0x04, 0x6D, 0xEE, 0x3F, 0x05, 0x6D, 0xF5, 0x03, 0x12, 0xAA, 88 0xE0, 0x03, 0x00, 0xF9, 0xE1, 0xCB, 0x00, 0xB9, 0xE0, 0xCF, 0x00, 0xBD, 89 0xE2, 0xD3, 0x00, 0xB9, 0xE3, 0xD7, 0x00, 0xB9, 0xFF, 0x83, 0x00, 0xD1, 90 0xFF, 0x83, 0x00, 0x91, 0xF2, 0x03, 0x15, 0xAA, 0xF3, 0x53, 0x46, 0xA9, 91 0xF5, 0x5B, 0x47, 0xA9, 0xF7, 0x63, 0x48, 0xA9, 0xF9, 0x6B, 0x49, 0xA9, 92 0xFB, 0x73, 0x4A, 0xA9, 0xFD, 0x7B, 0x4B, 0xA9, 0xE8, 0x27, 0x42, 0x6D, 93 0xEA, 0x2F, 0x43, 0x6D, 0xEC, 0x37, 0x44, 0x6D, 0xEE, 0x3F, 0x45, 0x6D, 94 0xFF, 0x03, 0x03, 0x91, 0xC0, 0x03, 0x5F, 0xD6, 95}; 96static constexpr uint8_t expected_cfi_kArm64[] = { 97 0x44, 0x0E, 0xC0, 0x01, 0x44, 0x93, 0x18, 0x94, 0x16, 0x44, 0x95, 0x14, 98 0x96, 0x12, 0x44, 0x97, 0x10, 0x98, 0x0E, 0x44, 0x99, 0x0C, 0x9A, 0x0A, 99 0x44, 0x9B, 0x08, 0x9C, 0x06, 0x44, 0x9D, 0x04, 0x9E, 0x02, 0x44, 0x05, 100 0x48, 0x28, 0x05, 0x49, 0x26, 0x44, 0x05, 0x4A, 0x24, 0x05, 0x4B, 0x22, 101 0x44, 0x05, 0x4C, 0x20, 0x05, 0x4D, 0x1E, 0x44, 0x05, 0x4E, 0x1C, 0x05, 102 0x4F, 0x1A, 0x5C, 0x0E, 0xE0, 0x01, 0x44, 0x0E, 0xC0, 0x01, 0x44, 0x0A, 103 0x44, 0xD3, 0xD4, 0x44, 0xD5, 0xD6, 0x44, 0xD7, 0xD8, 0x44, 0xD9, 0xDA, 104 0x44, 0xDB, 0xDC, 0x44, 0xDD, 0xDE, 0x44, 0x06, 0x48, 0x06, 0x49, 0x44, 105 0x06, 0x4A, 0x06, 0x4B, 0x44, 0x06, 0x4C, 0x06, 0x4D, 0x44, 0x06, 0x4E, 106 0x06, 0x4F, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0xC0, 0x01, 107}; 108// 0x00000000: sub sp, sp, #0xc0 (192) 109// 0x00000004: .cfi_def_cfa_offset: 192 110// 0x00000004: stp x19, x20, [sp, #96] 111// 0x00000008: .cfi_offset: r19 at cfa-96 112// 0x00000008: .cfi_offset: r20 at cfa-88 113// 0x00000008: stp x21, x22, [sp, #112] 114// 0x0000000c: .cfi_offset: r21 at cfa-80 115// 0x0000000c: .cfi_offset: r22 at cfa-72 116// 0x0000000c: stp x23, x24, [sp, #128] 117// 0x00000010: .cfi_offset: r23 at cfa-64 118// 0x00000010: .cfi_offset: r24 at cfa-56 119// 0x00000010: stp x25, x26, [sp, #144] 120// 0x00000014: .cfi_offset: r25 at cfa-48 121// 0x00000014: .cfi_offset: r26 at cfa-40 122// 0x00000014: stp x27, x28, [sp, #160] 123// 0x00000018: .cfi_offset: r27 at cfa-32 124// 0x00000018: .cfi_offset: r28 at cfa-24 125// 0x00000018: stp x29, lr, [sp, #176] 126// 0x0000001c: .cfi_offset: r29 at cfa-16 127// 0x0000001c: .cfi_offset: r30 at cfa-8 128// 0x0000001c: stp d8, d9, [sp, #32] 129// 0x00000020: .cfi_offset_extended: r72 at cfa-160 130// 0x00000020: .cfi_offset_extended: r73 at cfa-152 131// 0x00000020: stp d10, d11, [sp, #48] 132// 0x00000024: .cfi_offset_extended: r74 at cfa-144 133// 0x00000024: .cfi_offset_extended: r75 at cfa-136 134// 0x00000024: stp d12, d13, [sp, #64] 135// 0x00000028: .cfi_offset_extended: r76 at cfa-128 136// 0x00000028: .cfi_offset_extended: r77 at cfa-120 137// 0x00000028: stp d14, d15, [sp, #80] 138// 0x0000002c: .cfi_offset_extended: r78 at cfa-112 139// 0x0000002c: .cfi_offset_extended: r79 at cfa-104 140// 0x0000002c: mov x21, tr 141// 0x00000030: str x0, [sp] 142// 0x00000034: str w1, [sp, #200] 143// 0x00000038: str s0, [sp, #204] 144// 0x0000003c: str w2, [sp, #208] 145// 0x00000040: str w3, [sp, #212] 146// 0x00000044: sub sp, sp, #0x20 (32) 147// 0x00000048: .cfi_def_cfa_offset: 224 148// 0x00000048: add sp, sp, #0x20 (32) 149// 0x0000004c: .cfi_def_cfa_offset: 192 150// 0x0000004c: mov tr, x21 151// 0x00000050: .cfi_remember_state 152// 0x00000050: ldp x19, x20, [sp, #96] 153// 0x00000054: .cfi_restore: r19 154// 0x00000054: .cfi_restore: r20 155// 0x00000054: ldp x21, x22, [sp, #112] 156// 0x00000058: .cfi_restore: r21 157// 0x00000058: .cfi_restore: r22 158// 0x00000058: ldp x23, x24, [sp, #128] 159// 0x0000005c: .cfi_restore: r23 160// 0x0000005c: .cfi_restore: r24 161// 0x0000005c: ldp x25, x26, [sp, #144] 162// 0x00000060: .cfi_restore: r25 163// 0x00000060: .cfi_restore: r26 164// 0x00000060: ldp x27, x28, [sp, #160] 165// 0x00000064: .cfi_restore: r27 166// 0x00000064: .cfi_restore: r28 167// 0x00000064: ldp x29, lr, [sp, #176] 168// 0x00000068: .cfi_restore: r29 169// 0x00000068: .cfi_restore: r30 170// 0x00000068: ldp d8, d9, [sp, #32] 171// 0x0000006c: .cfi_restore_extended: r72 172// 0x0000006c: .cfi_restore_extended: r73 173// 0x0000006c: ldp d10, d11, [sp, #48] 174// 0x00000070: .cfi_restore_extended: r74 175// 0x00000070: .cfi_restore_extended: r75 176// 0x00000070: ldp d12, d13, [sp, #64] 177// 0x00000074: .cfi_restore_extended: r76 178// 0x00000074: .cfi_restore_extended: r77 179// 0x00000074: ldp d14, d15, [sp, #80] 180// 0x00000078: .cfi_restore_extended: r78 181// 0x00000078: .cfi_restore_extended: r79 182// 0x00000078: add sp, sp, #0xc0 (192) 183// 0x0000007c: .cfi_def_cfa_offset: 0 184// 0x0000007c: ret 185// 0x00000080: .cfi_restore_state 186// 0x00000080: .cfi_def_cfa_offset: 192 187 188static constexpr uint8_t expected_asm_kX86[] = { 189 0x57, 0x56, 0x55, 0x83, 0xC4, 0xE4, 0x50, 0x89, 0x4C, 0x24, 0x34, 0xF3, 190 0x0F, 0x11, 0x44, 0x24, 0x38, 0x89, 0x54, 0x24, 0x3C, 0x89, 0x5C, 0x24, 191 0x40, 0x83, 0xC4, 0xE0, 0x83, 0xC4, 0x20, 0x83, 0xC4, 0x20, 0x5D, 0x5E, 192 0x5F, 0xC3, 193}; 194static constexpr uint8_t expected_cfi_kX86[] = { 195 0x41, 0x0E, 0x08, 0x87, 0x02, 0x41, 0x0E, 0x0C, 0x86, 0x03, 0x41, 0x0E, 196 0x10, 0x85, 0x04, 0x43, 0x0E, 0x2C, 0x41, 0x0E, 0x30, 0x55, 0x0E, 0x50, 197 0x43, 0x0E, 0x30, 0x0A, 0x43, 0x0E, 0x10, 0x41, 0x0E, 0x0C, 0xC5, 0x41, 198 0x0E, 0x08, 0xC6, 0x41, 0x0E, 0x04, 0xC7, 0x41, 0x0B, 0x0E, 0x30, 199}; 200// 0x00000000: push edi 201// 0x00000001: .cfi_def_cfa_offset: 8 202// 0x00000001: .cfi_offset: r7 at cfa-8 203// 0x00000001: push esi 204// 0x00000002: .cfi_def_cfa_offset: 12 205// 0x00000002: .cfi_offset: r6 at cfa-12 206// 0x00000002: push ebp 207// 0x00000003: .cfi_def_cfa_offset: 16 208// 0x00000003: .cfi_offset: r5 at cfa-16 209// 0x00000003: add esp, -28 210// 0x00000006: .cfi_def_cfa_offset: 44 211// 0x00000006: push eax 212// 0x00000007: .cfi_def_cfa_offset: 48 213// 0x00000007: mov [esp + 52], ecx 214// 0x0000000b: movss [esp + 56], xmm0 215// 0x00000011: mov [esp + 60], edx 216// 0x00000015: mov [esp + 64], ebx 217// 0x00000019: add esp, -32 218// 0x0000001c: .cfi_def_cfa_offset: 80 219// 0x0000001c: add esp, 32 220// 0x0000001f: .cfi_def_cfa_offset: 48 221// 0x0000001f: .cfi_remember_state 222// 0x0000001f: add esp, 32 223// 0x00000022: .cfi_def_cfa_offset: 16 224// 0x00000022: pop ebp 225// 0x00000023: .cfi_def_cfa_offset: 12 226// 0x00000023: .cfi_restore: r5 227// 0x00000023: pop esi 228// 0x00000024: .cfi_def_cfa_offset: 8 229// 0x00000024: .cfi_restore: r6 230// 0x00000024: pop edi 231// 0x00000025: .cfi_def_cfa_offset: 4 232// 0x00000025: .cfi_restore: r7 233// 0x00000025: ret 234// 0x00000026: .cfi_restore_state 235// 0x00000026: .cfi_def_cfa_offset: 48 236 237static constexpr uint8_t expected_asm_kX86_64[] = { 238 0x41, 0x57, 0x41, 0x56, 0x41, 0x55, 0x41, 0x54, 0x55, 0x53, 0x48, 0x83, 239 0xEC, 0x48, 0xF2, 0x44, 0x0F, 0x11, 0x7C, 0x24, 0x40, 0xF2, 0x44, 0x0F, 240 0x11, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24, 0x30, 0xF2, 241 0x44, 0x0F, 0x11, 0x64, 0x24, 0x28, 0x48, 0x89, 0x3C, 0x24, 0x89, 0xB4, 242 0x24, 0x88, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x11, 0x84, 0x24, 0x8C, 0x00, 243 0x00, 0x00, 0x89, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x89, 0x8C, 0x24, 244 0x94, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0xE0, 0x48, 0x83, 0xC4, 0x20, 245 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x28, 0xF2, 0x44, 0x0F, 0x10, 0x6C, 246 0x24, 0x30, 0xF2, 0x44, 0x0F, 0x10, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 247 0x10, 0x7C, 0x24, 0x40, 0x48, 0x83, 0xC4, 0x48, 0x5B, 0x5D, 0x41, 0x5C, 248 0x41, 0x5D, 0x41, 0x5E, 0x41, 0x5F, 0xC3, 249}; 250static constexpr uint8_t expected_cfi_kX86_64[] = { 251 0x42, 0x0E, 0x10, 0x8F, 0x04, 0x42, 0x0E, 0x18, 0x8E, 0x06, 0x42, 0x0E, 252 0x20, 0x8D, 0x08, 0x42, 0x0E, 0x28, 0x8C, 0x0A, 0x41, 0x0E, 0x30, 0x86, 253 0x0C, 0x41, 0x0E, 0x38, 0x83, 0x0E, 0x44, 0x0E, 0x80, 0x01, 0x47, 0xA0, 254 0x10, 0x47, 0x9F, 0x12, 0x47, 0x9E, 0x14, 0x47, 0x9D, 0x16, 0x66, 0x0E, 255 0xA0, 0x01, 0x44, 0x0E, 0x80, 0x01, 0x0A, 0x47, 0xDD, 0x47, 0xDE, 0x47, 256 0xDF, 0x47, 0xE0, 0x44, 0x0E, 0x38, 0x41, 0x0E, 0x30, 0xC3, 0x41, 0x0E, 257 0x28, 0xC6, 0x42, 0x0E, 0x20, 0xCC, 0x42, 0x0E, 0x18, 0xCD, 0x42, 0x0E, 258 0x10, 0xCE, 0x42, 0x0E, 0x08, 0xCF, 0x41, 0x0B, 0x0E, 0x80, 0x01, 259}; 260// 0x00000000: push r15 261// 0x00000002: .cfi_def_cfa_offset: 16 262// 0x00000002: .cfi_offset: r15 at cfa-16 263// 0x00000002: push r14 264// 0x00000004: .cfi_def_cfa_offset: 24 265// 0x00000004: .cfi_offset: r14 at cfa-24 266// 0x00000004: push r13 267// 0x00000006: .cfi_def_cfa_offset: 32 268// 0x00000006: .cfi_offset: r13 at cfa-32 269// 0x00000006: push r12 270// 0x00000008: .cfi_def_cfa_offset: 40 271// 0x00000008: .cfi_offset: r12 at cfa-40 272// 0x00000008: push rbp 273// 0x00000009: .cfi_def_cfa_offset: 48 274// 0x00000009: .cfi_offset: r6 at cfa-48 275// 0x00000009: push rbx 276// 0x0000000a: .cfi_def_cfa_offset: 56 277// 0x0000000a: .cfi_offset: r3 at cfa-56 278// 0x0000000a: subq rsp, 72 279// 0x0000000e: .cfi_def_cfa_offset: 128 280// 0x0000000e: movsd [rsp + 64], xmm15 281// 0x00000015: .cfi_offset: r32 at cfa-64 282// 0x00000015: movsd [rsp + 56], xmm14 283// 0x0000001c: .cfi_offset: r31 at cfa-72 284// 0x0000001c: movsd [rsp + 48], xmm13 285// 0x00000023: .cfi_offset: r30 at cfa-80 286// 0x00000023: movsd [rsp + 40], xmm12 287// 0x0000002a: .cfi_offset: r29 at cfa-88 288// 0x0000002a: movq [rsp], rdi 289// 0x0000002e: mov [rsp + 136], esi 290// 0x00000035: movss [rsp + 140], xmm0 291// 0x0000003e: mov [rsp + 144], edx 292// 0x00000045: mov [rsp + 148], ecx 293// 0x0000004c: addq rsp, -32 294// 0x00000050: .cfi_def_cfa_offset: 160 295// 0x00000050: addq rsp, 32 296// 0x00000054: .cfi_def_cfa_offset: 128 297// 0x00000054: .cfi_remember_state 298// 0x00000054: movsd xmm12, [rsp + 40] 299// 0x0000005b: .cfi_restore: r29 300// 0x0000005b: movsd xmm13, [rsp + 48] 301// 0x00000062: .cfi_restore: r30 302// 0x00000062: movsd xmm14, [rsp + 56] 303// 0x00000069: .cfi_restore: r31 304// 0x00000069: movsd xmm15, [rsp + 64] 305// 0x00000070: .cfi_restore: r32 306// 0x00000070: addq rsp, 72 307// 0x00000074: .cfi_def_cfa_offset: 56 308// 0x00000074: pop rbx 309// 0x00000075: .cfi_def_cfa_offset: 48 310// 0x00000075: .cfi_restore: r3 311// 0x00000075: pop rbp 312// 0x00000076: .cfi_def_cfa_offset: 40 313// 0x00000076: .cfi_restore: r6 314// 0x00000076: pop r12 315// 0x00000078: .cfi_def_cfa_offset: 32 316// 0x00000078: .cfi_restore: r12 317// 0x00000078: pop r13 318// 0x0000007a: .cfi_def_cfa_offset: 24 319// 0x0000007a: .cfi_restore: r13 320// 0x0000007a: pop r14 321// 0x0000007c: .cfi_def_cfa_offset: 16 322// 0x0000007c: .cfi_restore: r14 323// 0x0000007c: pop r15 324// 0x0000007e: .cfi_def_cfa_offset: 8 325// 0x0000007e: .cfi_restore: r15 326// 0x0000007e: ret 327// 0x0000007f: .cfi_restore_state 328// 0x0000007f: .cfi_def_cfa_offset: 128 329 330static constexpr uint8_t expected_asm_kMips[] = { 331 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB8, 0xAF, 332 0x34, 0x00, 0xAF, 0xAF, 0x30, 0x00, 0xAE, 0xAF, 0x2C, 0x00, 0xAD, 0xAF, 333 0x28, 0x00, 0xAC, 0xAF, 0x24, 0x00, 0xAB, 0xAF, 0x20, 0x00, 0xAA, 0xAF, 334 0x1C, 0x00, 0xA9, 0xAF, 0x18, 0x00, 0xA8, 0xAF, 0x00, 0x00, 0xA4, 0xAF, 335 0x44, 0x00, 0xA5, 0xAF, 0x48, 0x00, 0xA6, 0xAF, 0x4C, 0x00, 0xA7, 0xAF, 336 0xE0, 0xFF, 0xBD, 0x27, 0x20, 0x00, 0xBD, 0x27, 0x18, 0x00, 0xA8, 0x8F, 337 0x1C, 0x00, 0xA9, 0x8F, 0x20, 0x00, 0xAA, 0x8F, 0x24, 0x00, 0xAB, 0x8F, 338 0x28, 0x00, 0xAC, 0x8F, 0x2C, 0x00, 0xAD, 0x8F, 0x30, 0x00, 0xAE, 0x8F, 339 0x34, 0x00, 0xAF, 0x8F, 0x38, 0x00, 0xB8, 0x8F, 0x3C, 0x00, 0xBF, 0x8F, 340 0x40, 0x00, 0xBD, 0x27, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 341}; 342static constexpr uint8_t expected_cfi_kMips[] = { 343 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x98, 0x02, 0x44, 0x8F, 0x03, 344 0x44, 0x8E, 0x04, 0x44, 0x8D, 0x05, 0x44, 0x8C, 0x06, 0x44, 0x8B, 0x07, 345 0x44, 0x8A, 0x08, 0x44, 0x89, 0x09, 0x44, 0x88, 0x0A, 0x54, 0x0E, 0x60, 346 0x44, 0x0E, 0x40, 0x0A, 0x44, 0xC8, 0x44, 0xC9, 0x44, 0xCA, 0x44, 0xCB, 347 0x44, 0xCC, 0x44, 0xCD, 0x44, 0xCE, 0x44, 0xCF, 0x44, 0xD8, 0x44, 0xDF, 348 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40, 349}; 350// 0x00000000: addiu r29, r29, -64 351// 0x00000004: .cfi_def_cfa_offset: 64 352// 0x00000004: sw r31, +60(r29) 353// 0x00000008: .cfi_offset: r31 at cfa-4 354// 0x00000008: sw r24, +56(r29) 355// 0x0000000c: .cfi_offset: r24 at cfa-8 356// 0x0000000c: sw r15, +52(r29) 357// 0x00000010: .cfi_offset: r15 at cfa-12 358// 0x00000010: sw r14, +48(r29) 359// 0x00000014: .cfi_offset: r14 at cfa-16 360// 0x00000014: sw r13, +44(r29) 361// 0x00000018: .cfi_offset: r13 at cfa-20 362// 0x00000018: sw r12, +40(r29) 363// 0x0000001c: .cfi_offset: r12 at cfa-24 364// 0x0000001c: sw r11, +36(r29) 365// 0x00000020: .cfi_offset: r11 at cfa-28 366// 0x00000020: sw r10, +32(r29) 367// 0x00000024: .cfi_offset: r10 at cfa-32 368// 0x00000024: sw r9, +28(r29) 369// 0x00000028: .cfi_offset: r9 at cfa-36 370// 0x00000028: sw r8, +24(r29) 371// 0x0000002c: .cfi_offset: r8 at cfa-40 372// 0x0000002c: sw r4, +0(r29) 373// 0x00000030: sw r5, +68(r29) 374// 0x00000034: sw r6, +72(r29) 375// 0x00000038: sw r7, +76(r29) 376// 0x0000003c: addiu r29, r29, -32 377// 0x00000040: .cfi_def_cfa_offset: 96 378// 0x00000040: addiu r29, r29, 32 379// 0x00000044: .cfi_def_cfa_offset: 64 380// 0x00000044: .cfi_remember_state 381// 0x00000044: lw r8, +24(r29) 382// 0x00000048: .cfi_restore: r8 383// 0x00000048: lw r9, +28(r29) 384// 0x0000004c: .cfi_restore: r9 385// 0x0000004c: lw r10, +32(r29) 386// 0x00000050: .cfi_restore: r10 387// 0x00000050: lw r11, +36(r29) 388// 0x00000054: .cfi_restore: r11 389// 0x00000054: lw r12, +40(r29) 390// 0x00000058: .cfi_restore: r12 391// 0x00000058: lw r13, +44(r29) 392// 0x0000005c: .cfi_restore: r13 393// 0x0000005c: lw r14, +48(r29) 394// 0x00000060: .cfi_restore: r14 395// 0x00000060: lw r15, +52(r29) 396// 0x00000064: .cfi_restore: r15 397// 0x00000064: lw r24, +56(r29) 398// 0x00000068: .cfi_restore: r24 399// 0x00000068: lw r31, +60(r29) 400// 0x0000006c: .cfi_restore: r31 401// 0x0000006c: addiu r29, r29, 64 402// 0x00000070: .cfi_def_cfa_offset: 0 403// 0x00000070: jr r31 404// 0x00000074: nop 405// 0x00000078: .cfi_restore_state 406// 0x00000078: .cfi_def_cfa_offset: 64 407 408static constexpr uint8_t expected_asm_kMips64[] = { 409 0xA0, 0xFF, 0xBD, 0x67, 0x58, 0x00, 0xBF, 0xFF, 0x50, 0x00, 0xBE, 0xFF, 410 0x48, 0x00, 0xBC, 0xFF, 0x40, 0x00, 0xB7, 0xFF, 0x38, 0x00, 0xB6, 0xFF, 411 0x30, 0x00, 0xB5, 0xFF, 0x28, 0x00, 0xB4, 0xFF, 0x20, 0x00, 0xB3, 0xFF, 412 0x18, 0x00, 0xB2, 0xFF, 0x00, 0x00, 0xA4, 0xFF, 0x68, 0x00, 0xA5, 0xAF, 413 0x6C, 0x00, 0xAE, 0xE7, 0x70, 0x00, 0xA7, 0xAF, 0x74, 0x00, 0xA8, 0xAF, 414 0xE0, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBD, 0x67, 0x18, 0x00, 0xB2, 0xDF, 415 0x20, 0x00, 0xB3, 0xDF, 0x28, 0x00, 0xB4, 0xDF, 0x30, 0x00, 0xB5, 0xDF, 416 0x38, 0x00, 0xB6, 0xDF, 0x40, 0x00, 0xB7, 0xDF, 0x48, 0x00, 0xBC, 0xDF, 417 0x50, 0x00, 0xBE, 0xDF, 0x58, 0x00, 0xBF, 0xDF, 0x60, 0x00, 0xBD, 0x67, 418 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 419}; 420static constexpr uint8_t expected_cfi_kMips64[] = { 421 0x44, 0x0E, 0x60, 0x44, 0x9F, 0x02, 0x44, 0x9E, 0x04, 0x44, 0x9C, 0x06, 422 0x44, 0x97, 0x08, 0x44, 0x96, 0x0A, 0x44, 0x95, 0x0C, 0x44, 0x94, 0x0E, 423 0x44, 0x93, 0x10, 0x44, 0x92, 0x12, 0x58, 0x0E, 0x80, 0x01, 0x44, 0x0E, 424 0x60, 0x0A, 0x44, 0xD2, 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6, 425 0x44, 0xD7, 0x44, 0xDC, 0x44, 0xDE, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48, 426 0x0B, 0x0E, 0x60, 427}; 428// 0x00000000: daddiu r29, r29, -96 429// 0x00000004: .cfi_def_cfa_offset: 96 430// 0x00000004: sd r31, +88(r29) 431// 0x00000008: .cfi_offset: r31 at cfa-8 432// 0x00000008: sd r30, +80(r29) 433// 0x0000000c: .cfi_offset: r30 at cfa-16 434// 0x0000000c: sd r28, +72(r29) 435// 0x00000010: .cfi_offset: r28 at cfa-24 436// 0x00000010: sd r23, +64(r29) 437// 0x00000014: .cfi_offset: r23 at cfa-32 438// 0x00000014: sd r22, +56(r29) 439// 0x00000018: .cfi_offset: r22 at cfa-40 440// 0x00000018: sd r21, +48(r29) 441// 0x0000001c: .cfi_offset: r21 at cfa-48 442// 0x0000001c: sd r20, +40(r29) 443// 0x00000020: .cfi_offset: r20 at cfa-56 444// 0x00000020: sd r19, +32(r29) 445// 0x00000024: .cfi_offset: r19 at cfa-64 446// 0x00000024: sd r18, +24(r29) 447// 0x00000028: .cfi_offset: r18 at cfa-72 448// 0x00000028: sd r4, +0(r29) 449// 0x0000002c: sw r5, +104(r29) 450// 0x00000030: swc1 f14, +108(r29) 451// 0x00000034: sw r7, +112(r29) 452// 0x00000038: sw r8, +116(r29) 453// 0x0000003c: daddiu r29, r29, -32 454// 0x00000040: .cfi_def_cfa_offset: 128 455// 0x00000040: daddiu r29, r29, 32 456// 0x00000044: .cfi_def_cfa_offset: 96 457// 0x00000044: .cfi_remember_state 458// 0x00000044: ld r18, +24(r29) 459// 0x00000048: .cfi_restore: r18 460// 0x00000048: ld r19, +32(r29) 461// 0x0000004c: .cfi_restore: r19 462// 0x0000004c: ld r20, +40(r29) 463// 0x00000050: .cfi_restore: r20 464// 0x00000050: ld r21, +48(r29) 465// 0x00000054: .cfi_restore: r21 466// 0x00000054: ld r22, +56(r29) 467// 0x00000058: .cfi_restore: r22 468// 0x00000058: ld r23, +64(r29) 469// 0x0000005c: .cfi_restore: r23 470// 0x0000005c: ld r28, +72(r29) 471// 0x00000060: .cfi_restore: r28 472// 0x00000060: ld r30, +80(r29) 473// 0x00000064: .cfi_restore: r30 474// 0x00000064: ld r31, +88(r29) 475// 0x00000068: .cfi_restore: r31 476// 0x00000068: daddiu r29, r29, 96 477// 0x0000006c: .cfi_def_cfa_offset: 0 478// 0x0000006c: jr r31 479// 0x00000070: nop 480// 0x00000074: .cfi_restore_state 481// 0x00000074: .cfi_def_cfa_offset: 96 482