1static constexpr uint8_t expected_asm_kThumb2[] = { 2 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x0B, 0xB0, 3 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD, 4}; 5static constexpr uint8_t expected_cfi_kThumb2[] = { 6 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14, 7 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x0A, 0x42, 8 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B, 0x0E, 9 0x40, 10}; 11// 0x00000000: push {r5, r6, lr} 12// 0x00000002: .cfi_def_cfa_offset: 12 13// 0x00000002: .cfi_offset: r5 at cfa-12 14// 0x00000002: .cfi_offset: r6 at cfa-8 15// 0x00000002: .cfi_offset: r14 at cfa-4 16// 0x00000002: vpush.f32 {s16-s17} 17// 0x00000006: .cfi_def_cfa_offset: 20 18// 0x00000006: .cfi_offset_extended: r80 at cfa-20 19// 0x00000006: .cfi_offset_extended: r81 at cfa-16 20// 0x00000006: sub sp, sp, #44 21// 0x00000008: .cfi_def_cfa_offset: 64 22// 0x00000008: .cfi_remember_state 23// 0x00000008: add sp, sp, #44 24// 0x0000000a: .cfi_def_cfa_offset: 20 25// 0x0000000a: vpop.f32 {s16-s17} 26// 0x0000000e: .cfi_def_cfa_offset: 12 27// 0x0000000e: .cfi_restore_extended: r80 28// 0x0000000e: .cfi_restore_extended: r81 29// 0x0000000e: pop {r5, r6, pc} 30// 0x00000010: .cfi_restore_state 31// 0x00000010: .cfi_def_cfa_offset: 64 32 33static constexpr uint8_t expected_asm_kArm64[] = { 34 0xFF, 0x03, 0x01, 0xD1, 0xF5, 0x17, 0x00, 0xF9, 0xF6, 0x7B, 0x03, 0xA9, 35 0xE8, 0xA7, 0x01, 0x6D, 0xE8, 0xA7, 0x41, 0x6D, 0xF5, 0x17, 0x40, 0xF9, 36 0xF6, 0x7B, 0x43, 0xA9, 0xFF, 0x03, 0x01, 0x91, 0xC0, 0x03, 0x5F, 0xD6, 37}; 38static constexpr uint8_t expected_cfi_kArm64[] = { 39 0x44, 0x0E, 0x40, 0x44, 0x95, 0x06, 0x44, 0x96, 0x04, 0x9E, 0x02, 0x44, 40 0x05, 0x48, 0x0A, 0x05, 0x49, 0x08, 0x0A, 0x44, 0x06, 0x48, 0x06, 0x49, 41 0x44, 0xD5, 0x44, 0xD6, 0xDE, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0x40, 42}; 43// 0x00000000: sub sp, sp, #0x40 (64) 44// 0x00000004: .cfi_def_cfa_offset: 64 45// 0x00000004: str x21, [sp, #40] 46// 0x00000008: .cfi_offset: r21 at cfa-24 47// 0x00000008: stp x22, lr, [sp, #48] 48// 0x0000000c: .cfi_offset: r22 at cfa-16 49// 0x0000000c: .cfi_offset: r30 at cfa-8 50// 0x0000000c: stp d8, d9, [sp, #24] 51// 0x00000010: .cfi_offset_extended: r72 at cfa-40 52// 0x00000010: .cfi_offset_extended: r73 at cfa-32 53// 0x00000010: .cfi_remember_state 54// 0x00000010: ldp d8, d9, [sp, #24] 55// 0x00000014: .cfi_restore_extended: r72 56// 0x00000014: .cfi_restore_extended: r73 57// 0x00000014: ldr x21, [sp, #40] 58// 0x00000018: .cfi_restore: r21 59// 0x00000018: ldp x22, lr, [sp, #48] 60// 0x0000001c: .cfi_restore: r22 61// 0x0000001c: .cfi_restore: r30 62// 0x0000001c: add sp, sp, #0x40 (64) 63// 0x00000020: .cfi_def_cfa_offset: 0 64// 0x00000020: ret 65// 0x00000024: .cfi_restore_state 66// 0x00000024: .cfi_def_cfa_offset: 64 67 68static constexpr uint8_t expected_asm_kX86[] = { 69 0x56, 0x55, 0x83, 0xEC, 0x34, 0x83, 0xC4, 0x34, 0x5D, 70 0x5E, 0xC3, 71}; 72static constexpr uint8_t expected_cfi_kX86[] = { 73 0x41, 0x0E, 0x08, 0x86, 0x02, 0x41, 0x0E, 0x0C, 0x85, 0x03, 0x43, 0x0E, 74 0x40, 0x0A, 0x43, 0x0E, 0x0C, 0x41, 0x0E, 0x08, 0xC5, 0x41, 0x0E, 75 0x04, 0xC6, 0x41, 0x0B, 0x0E, 0x40, 76}; 77// 0x00000000: push esi 78// 0x00000001: .cfi_def_cfa_offset: 8 79// 0x00000001: .cfi_offset: r6 at cfa-8 80// 0x00000001: push ebp 81// 0x00000002: .cfi_def_cfa_offset: 12 82// 0x00000002: .cfi_offset: r5 at cfa-12 83// 0x00000002: sub esp, 52 84// 0x00000005: .cfi_def_cfa_offset: 64 85// 0x00000005: .cfi_remember_state 86// 0x00000005: add esp, 52 87// 0x00000008: .cfi_def_cfa_offset: 12 88// 0x00000008: pop ebp 89// 0x0000000a: .cfi_def_cfa_offset: 8 90// 0x0000000a: .cfi_restore: r5 91// 0x0000000a: pop esi 92// 0x0000000b: .cfi_def_cfa_offset: 4 93// 0x0000000b: .cfi_restore: r6 94// 0x0000000b: ret 95// 0x0000000c: .cfi_restore_state 96// 0x0000000c: .cfi_def_cfa_offset: 64 97 98static constexpr uint8_t expected_asm_kX86_64[] = { 99 0x55, 0x53, 0x48, 0x83, 0xEC, 0x28, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24, 100 0x20, 0xF2, 0x44, 0x0F, 0x11, 0x64, 0x24, 0x18, 101 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x18, 0xF2, 0x44, 0x0F, 0x10, 0x6C, 102 0x24, 0x20, 0x48, 0x83, 0xC4, 0x28, 0x5B, 0x5D, 0xC3, 103}; 104static constexpr uint8_t expected_cfi_kX86_64[] = { 105 0x41, 0x0E, 0x10, 0x86, 0x04, 0x41, 0x0E, 0x18, 0x83, 0x06, 0x44, 0x0E, 106 0x40, 0x47, 0x9E, 0x08, 0x47, 0x9D, 0x0A, 0x0A, 0x47, 0xDD, 0x47, 107 0xDE, 0x44, 0x0E, 0x18, 0x41, 0x0E, 0x10, 0xC3, 0x41, 0x0E, 0x08, 0xC6, 108 0x41, 0x0B, 0x0E, 0x40, 109}; 110// 0x00000000: push rbp 111// 0x00000001: .cfi_def_cfa_offset: 16 112// 0x00000001: .cfi_offset: r6 at cfa-16 113// 0x00000001: push rbx 114// 0x00000002: .cfi_def_cfa_offset: 24 115// 0x00000002: .cfi_offset: r3 at cfa-24 116// 0x00000002: subq rsp, 40 117// 0x00000006: .cfi_def_cfa_offset: 64 118// 0x00000006: movsd [rsp + 32], xmm13 119// 0x0000000d: .cfi_offset: r30 at cfa-32 120// 0x0000000d: movsd [rsp + 24], xmm12 121// 0x00000014: .cfi_offset: r29 at cfa-40 122// 0x00000014: .cfi_remember_state 123// 0x00000014: movsd xmm12, [rsp + 24] 124// 0x0000001c: .cfi_restore: r29 125// 0x0000001c: movsd xmm13, [rsp + 32] 126// 0x00000022: .cfi_restore: r30 127// 0x00000022: addq rsp, 40 128// 0x00000026: .cfi_def_cfa_offset: 24 129// 0x00000026: pop rbx 130// 0x00000027: .cfi_def_cfa_offset: 16 131// 0x00000027: .cfi_restore: r3 132// 0x00000027: pop rbp 133// 0x00000028: .cfi_def_cfa_offset: 8 134// 0x00000028: .cfi_restore: r6 135// 0x00000028: ret 136// 0x00000029: .cfi_restore_state 137// 0x00000029: .cfi_def_cfa_offset: 64 138 139static constexpr uint8_t expected_asm_kThumb2_adjust[] = { 140 // VIXL emits an extra 2 bytes here for a 32-bit beq as there is no 141 // optimistic 16-bit emit and subsequent fixup for out of reach targets 142 // as with the old assembler. 143 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x28, 0x00, 0xF0, 144 0x41, 0x80, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 145 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 146 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 147 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 148 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 149 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 150 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 151 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 152 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 153 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 154 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 155 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD, 156}; 157static constexpr uint8_t expected_cfi_kThumb2_adjust[] = { 158 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14, 159 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A, 160 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B, 161 0x0E, 0x40, 162}; 163// 0x00000000: push {r5, r6, lr} 164// 0x00000002: .cfi_def_cfa_offset: 12 165// 0x00000002: .cfi_offset: r5 at cfa-12 166// 0x00000002: .cfi_offset: r6 at cfa-8 167// 0x00000002: .cfi_offset: r14 at cfa-4 168// 0x00000002: vpush.f32 {s16-s17} 169// 0x00000006: .cfi_def_cfa_offset: 20 170// 0x00000006: .cfi_offset_extended: r80 at cfa-20 171// 0x00000006: .cfi_offset_extended: r81 at cfa-16 172// 0x00000006: sub sp, sp, #44 173// 0x00000008: .cfi_def_cfa_offset: 64 174// 0x00000008: cmp r0, #0 175// 0x0000000a: beq +128 (0x00000090) 176// 0x0000000c: ldr r0, [r0, #0] 177// 0x0000000e: ldr r0, [r0, #0] 178// 0x00000010: ldr r0, [r0, #0] 179// 0x00000012: ldr r0, [r0, #0] 180// 0x00000014: ldr r0, [r0, #0] 181// 0x00000016: ldr r0, [r0, #0] 182// 0x00000018: ldr r0, [r0, #0] 183// 0x0000001a: ldr r0, [r0, #0] 184// 0x0000001c: ldr r0, [r0, #0] 185// 0x0000001e: ldr r0, [r0, #0] 186// 0x00000020: ldr r0, [r0, #0] 187// 0x00000022: ldr r0, [r0, #0] 188// 0x00000024: ldr r0, [r0, #0] 189// 0x00000026: ldr r0, [r0, #0] 190// 0x00000028: ldr r0, [r0, #0] 191// 0x0000002a: ldr r0, [r0, #0] 192// 0x0000002c: ldr r0, [r0, #0] 193// 0x0000002e: ldr r0, [r0, #0] 194// 0x00000030: ldr r0, [r0, #0] 195// 0x00000032: ldr r0, [r0, #0] 196// 0x00000034: ldr r0, [r0, #0] 197// 0x00000036: ldr r0, [r0, #0] 198// 0x00000038: ldr r0, [r0, #0] 199// 0x0000003a: ldr r0, [r0, #0] 200// 0x0000003c: ldr r0, [r0, #0] 201// 0x0000003e: ldr r0, [r0, #0] 202// 0x00000040: ldr r0, [r0, #0] 203// 0x00000042: ldr r0, [r0, #0] 204// 0x00000044: ldr r0, [r0, #0] 205// 0x00000046: ldr r0, [r0, #0] 206// 0x00000048: ldr r0, [r0, #0] 207// 0x0000004a: ldr r0, [r0, #0] 208// 0x0000004c: ldr r0, [r0, #0] 209// 0x0000004e: ldr r0, [r0, #0] 210// 0x00000050: ldr r0, [r0, #0] 211// 0x00000052: ldr r0, [r0, #0] 212// 0x00000054: ldr r0, [r0, #0] 213// 0x00000056: ldr r0, [r0, #0] 214// 0x00000058: ldr r0, [r0, #0] 215// 0x0000005a: ldr r0, [r0, #0] 216// 0x0000005c: ldr r0, [r0, #0] 217// 0x0000005e: ldr r0, [r0, #0] 218// 0x00000060: ldr r0, [r0, #0] 219// 0x00000062: ldr r0, [r0, #0] 220// 0x00000064: ldr r0, [r0, #0] 221// 0x00000066: ldr r0, [r0, #0] 222// 0x00000068: ldr r0, [r0, #0] 223// 0x0000006a: ldr r0, [r0, #0] 224// 0x0000006c: ldr r0, [r0, #0] 225// 0x0000006e: ldr r0, [r0, #0] 226// 0x00000070: ldr r0, [r0, #0] 227// 0x00000072: ldr r0, [r0, #0] 228// 0x00000074: ldr r0, [r0, #0] 229// 0x00000076: ldr r0, [r0, #0] 230// 0x00000078: ldr r0, [r0, #0] 231// 0x0000007a: ldr r0, [r0, #0] 232// 0x0000007c: ldr r0, [r0, #0] 233// 0x0000007e: ldr r0, [r0, #0] 234// 0x00000080: ldr r0, [r0, #0] 235// 0x00000082: ldr r0, [r0, #0] 236// 0x00000084: ldr r0, [r0, #0] 237// 0x00000086: ldr r0, [r0, #0] 238// 0x00000088: ldr r0, [r0, #0] 239// 0x0000008a: ldr r0, [r0, #0] 240// 0x0000008c: ldr r0, [r0, #0] 241// 0x0000008e: .cfi_remember_state 242// 0x0000008e: add sp, sp, #44 243// 0x00000090: .cfi_def_cfa_offset: 20 244// 0x00000090: vpop.f32 {s16-s17} 245// 0x00000094: .cfi_def_cfa_offset: 12 246// 0x00000094: .cfi_restore_extended: r80 247// 0x00000094: .cfi_restore_extended: r81 248// 0x00000094: pop {r5, r6, pc} 249// 0x00000096: .cfi_restore_state 250// 0x00000096: .cfi_def_cfa_offset: 64 251