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