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