blob: 47e6f106ca32ea127a4b62e143767d4b1d5c3053 [file] [log] [blame]
David Srbeckydd973932015-04-07 20:29:48 +01001static 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, 0xFE, 0x5F, 0x00, 0xF9, 0xFD, 0x5B, 0x00, 0xF9,
85 0xFC, 0x57, 0x00, 0xF9, 0xFB, 0x53, 0x00, 0xF9, 0xFA, 0x4F, 0x00, 0xF9,
86 0xF9, 0x4B, 0x00, 0xF9, 0xF8, 0x47, 0x00, 0xF9, 0xF7, 0x43, 0x00, 0xF9,
87 0xF6, 0x3F, 0x00, 0xF9, 0xF5, 0x3B, 0x00, 0xF9, 0xF4, 0x37, 0x00, 0xF9,
88 0xEF, 0x33, 0x00, 0xFD, 0xEE, 0x2F, 0x00, 0xFD, 0xED, 0x2B, 0x00, 0xFD,
89 0xEC, 0x27, 0x00, 0xFD, 0xEB, 0x23, 0x00, 0xFD, 0xEA, 0x1F, 0x00, 0xFD,
90 0xE9, 0x1B, 0x00, 0xFD, 0xE8, 0x17, 0x00, 0xFD, 0xF5, 0x03, 0x12, 0xAA,
91 0xE0, 0x03, 0x00, 0xB9, 0xE1, 0xC7, 0x00, 0xB9, 0xE0, 0xCB, 0x00, 0xBD,
92 0xE2, 0xCF, 0x00, 0xB9, 0xE3, 0xD3, 0x00, 0xB9, 0xFF, 0x83, 0x00, 0xD1,
93 0xFF, 0x83, 0x00, 0x91, 0xF2, 0x03, 0x15, 0xAA, 0xFE, 0x5F, 0x40, 0xF9,
94 0xFD, 0x5B, 0x40, 0xF9, 0xFC, 0x57, 0x40, 0xF9, 0xFB, 0x53, 0x40, 0xF9,
95 0xFA, 0x4F, 0x40, 0xF9, 0xF9, 0x4B, 0x40, 0xF9, 0xF8, 0x47, 0x40, 0xF9,
96 0xF7, 0x43, 0x40, 0xF9, 0xF6, 0x3F, 0x40, 0xF9, 0xF5, 0x3B, 0x40, 0xF9,
97 0xF4, 0x37, 0x40, 0xF9, 0xEF, 0x33, 0x40, 0xFD, 0xEE, 0x2F, 0x40, 0xFD,
98 0xED, 0x2B, 0x40, 0xFD, 0xEC, 0x27, 0x40, 0xFD, 0xEB, 0x23, 0x40, 0xFD,
99 0xEA, 0x1F, 0x40, 0xFD, 0xE9, 0x1B, 0x40, 0xFD, 0xE8, 0x17, 0x40, 0xFD,
100 0xFF, 0x03, 0x03, 0x91, 0xC0, 0x03, 0x5F, 0xD6,
101};
102static constexpr uint8_t expected_cfi_kArm64[] = {
103 0x44, 0x0E, 0xC0, 0x01, 0x44, 0x9E, 0x02, 0x44, 0x9D, 0x04, 0x44, 0x9C,
104 0x06, 0x44, 0x9B, 0x08, 0x44, 0x9A, 0x0A, 0x44, 0x99, 0x0C, 0x44, 0x98,
105 0x0E, 0x44, 0x97, 0x10, 0x44, 0x96, 0x12, 0x44, 0x95, 0x14, 0x44, 0x94,
106 0x16, 0x44, 0x05, 0x4F, 0x18, 0x44, 0x05, 0x4E, 0x1A, 0x44, 0x05, 0x4D,
107 0x1C, 0x44, 0x05, 0x4C, 0x1E, 0x44, 0x05, 0x4B, 0x20, 0x44, 0x05, 0x4A,
108 0x22, 0x44, 0x05, 0x49, 0x24, 0x44, 0x05, 0x48, 0x26, 0x5C, 0x0E, 0xE0,
109 0x01, 0x44, 0x0E, 0xC0, 0x01, 0x0A, 0x48, 0xDE, 0x44, 0xDD, 0x44, 0xDC,
110 0x44, 0xDB, 0x44, 0xDA, 0x44, 0xD9, 0x44, 0xD8, 0x44, 0xD7, 0x44, 0xD6,
111 0x44, 0xD5, 0x44, 0xD4, 0x44, 0x06, 0x4F, 0x44, 0x06, 0x4E, 0x44, 0x06,
112 0x4D, 0x44, 0x06, 0x4C, 0x44, 0x06, 0x4B, 0x44, 0x06, 0x4A, 0x44, 0x06,
113 0x49, 0x44, 0x06, 0x48, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0xC0, 0x01,
114};
115// 0x00000000: sub sp, sp, #0xc0 (192)
116// 0x00000004: .cfi_def_cfa_offset: 192
117// 0x00000004: str lr, [sp, #184]
118// 0x00000008: .cfi_offset: r30 at cfa-8
119// 0x00000008: str x29, [sp, #176]
120// 0x0000000c: .cfi_offset: r29 at cfa-16
121// 0x0000000c: str x28, [sp, #168]
122// 0x00000010: .cfi_offset: r28 at cfa-24
123// 0x00000010: str x27, [sp, #160]
124// 0x00000014: .cfi_offset: r27 at cfa-32
125// 0x00000014: str x26, [sp, #152]
126// 0x00000018: .cfi_offset: r26 at cfa-40
127// 0x00000018: str x25, [sp, #144]
128// 0x0000001c: .cfi_offset: r25 at cfa-48
129// 0x0000001c: str x24, [sp, #136]
130// 0x00000020: .cfi_offset: r24 at cfa-56
131// 0x00000020: str x23, [sp, #128]
132// 0x00000024: .cfi_offset: r23 at cfa-64
133// 0x00000024: str x22, [sp, #120]
134// 0x00000028: .cfi_offset: r22 at cfa-72
135// 0x00000028: str x21, [sp, #112]
136// 0x0000002c: .cfi_offset: r21 at cfa-80
137// 0x0000002c: str x20, [sp, #104]
138// 0x00000030: .cfi_offset: r20 at cfa-88
139// 0x00000030: str d15, [sp, #96]
140// 0x00000034: .cfi_offset_extended: r79 at cfa-96
141// 0x00000034: str d14, [sp, #88]
142// 0x00000038: .cfi_offset_extended: r78 at cfa-104
143// 0x00000038: str d13, [sp, #80]
144// 0x0000003c: .cfi_offset_extended: r77 at cfa-112
145// 0x0000003c: str d12, [sp, #72]
146// 0x00000040: .cfi_offset_extended: r76 at cfa-120
147// 0x00000040: str d11, [sp, #64]
148// 0x00000044: .cfi_offset_extended: r75 at cfa-128
149// 0x00000044: str d10, [sp, #56]
150// 0x00000048: .cfi_offset_extended: r74 at cfa-136
151// 0x00000048: str d9, [sp, #48]
152// 0x0000004c: .cfi_offset_extended: r73 at cfa-144
153// 0x0000004c: str d8, [sp, #40]
154// 0x00000050: .cfi_offset_extended: r72 at cfa-152
155// 0x00000050: mov x21, tr
156// 0x00000054: str w0, [sp]
157// 0x00000058: str w1, [sp, #196]
158// 0x0000005c: str s0, [sp, #200]
159// 0x00000060: str w2, [sp, #204]
160// 0x00000064: str w3, [sp, #208]
161// 0x00000068: sub sp, sp, #0x20 (32)
162// 0x0000006c: .cfi_def_cfa_offset: 224
163// 0x0000006c: add sp, sp, #0x20 (32)
164// 0x00000070: .cfi_def_cfa_offset: 192
165// 0x00000070: .cfi_remember_state
166// 0x00000070: mov tr, x21
167// 0x00000074: ldr lr, [sp, #184]
168// 0x00000078: .cfi_restore: r30
169// 0x00000078: ldr x29, [sp, #176]
170// 0x0000007c: .cfi_restore: r29
171// 0x0000007c: ldr x28, [sp, #168]
172// 0x00000080: .cfi_restore: r28
173// 0x00000080: ldr x27, [sp, #160]
174// 0x00000084: .cfi_restore: r27
175// 0x00000084: ldr x26, [sp, #152]
176// 0x00000088: .cfi_restore: r26
177// 0x00000088: ldr x25, [sp, #144]
178// 0x0000008c: .cfi_restore: r25
179// 0x0000008c: ldr x24, [sp, #136]
180// 0x00000090: .cfi_restore: r24
181// 0x00000090: ldr x23, [sp, #128]
182// 0x00000094: .cfi_restore: r23
183// 0x00000094: ldr x22, [sp, #120]
184// 0x00000098: .cfi_restore: r22
185// 0x00000098: ldr x21, [sp, #112]
186// 0x0000009c: .cfi_restore: r21
187// 0x0000009c: ldr x20, [sp, #104]
188// 0x000000a0: .cfi_restore: r20
189// 0x000000a0: ldr d15, [sp, #96]
190// 0x000000a4: .cfi_restore_extended: r79
191// 0x000000a4: ldr d14, [sp, #88]
192// 0x000000a8: .cfi_restore_extended: r78
193// 0x000000a8: ldr d13, [sp, #80]
194// 0x000000ac: .cfi_restore_extended: r77
195// 0x000000ac: ldr d12, [sp, #72]
196// 0x000000b0: .cfi_restore_extended: r76
197// 0x000000b0: ldr d11, [sp, #64]
198// 0x000000b4: .cfi_restore_extended: r75
199// 0x000000b4: ldr d10, [sp, #56]
200// 0x000000b8: .cfi_restore_extended: r74
201// 0x000000b8: ldr d9, [sp, #48]
202// 0x000000bc: .cfi_restore_extended: r73
203// 0x000000bc: ldr d8, [sp, #40]
204// 0x000000c0: .cfi_restore_extended: r72
205// 0x000000c0: add sp, sp, #0xc0 (192)
206// 0x000000c4: .cfi_def_cfa_offset: 0
207// 0x000000c4: ret
208// 0x000000c8: .cfi_restore_state
209// 0x000000c8: .cfi_def_cfa_offset: 192
210
211static constexpr uint8_t expected_asm_kX86[] = {
212 0x57, 0x56, 0x55, 0x83, 0xC4, 0xE4, 0x50, 0x89, 0x4C, 0x24, 0x34, 0xF3,
213 0x0F, 0x11, 0x44, 0x24, 0x38, 0x89, 0x54, 0x24, 0x3C, 0x89, 0x5C, 0x24,
214 0x40, 0x83, 0xC4, 0xE0, 0x83, 0xC4, 0x20, 0x83, 0xC4, 0x20, 0x5D, 0x5E,
215 0x5F, 0xC3,
216};
217static constexpr uint8_t expected_cfi_kX86[] = {
218 0x41, 0x0E, 0x08, 0x87, 0x02, 0x41, 0x0E, 0x0C, 0x86, 0x03, 0x41, 0x0E,
219 0x10, 0x85, 0x04, 0x43, 0x0E, 0x2C, 0x41, 0x0E, 0x30, 0x55, 0x0E, 0x50,
220 0x43, 0x0E, 0x30, 0x0A, 0x43, 0x0E, 0x10, 0x41, 0x0E, 0x0C, 0xC5, 0x41,
221 0x0E, 0x08, 0xC6, 0x41, 0x0E, 0x04, 0xC7, 0x41, 0x0B, 0x0E, 0x30,
222};
223// 0x00000000: push edi
224// 0x00000001: .cfi_def_cfa_offset: 8
225// 0x00000001: .cfi_offset: r7 at cfa-8
226// 0x00000001: push esi
227// 0x00000002: .cfi_def_cfa_offset: 12
228// 0x00000002: .cfi_offset: r6 at cfa-12
229// 0x00000002: push ebp
230// 0x00000003: .cfi_def_cfa_offset: 16
231// 0x00000003: .cfi_offset: r5 at cfa-16
232// 0x00000003: add esp, -28
233// 0x00000006: .cfi_def_cfa_offset: 44
234// 0x00000006: push eax
235// 0x00000007: .cfi_def_cfa_offset: 48
236// 0x00000007: mov [esp + 52], ecx
237// 0x0000000b: movss [esp + 56], xmm0
238// 0x00000011: mov [esp + 60], edx
239// 0x00000015: mov [esp + 64], ebx
240// 0x00000019: add esp, -32
241// 0x0000001c: .cfi_def_cfa_offset: 80
242// 0x0000001c: add esp, 32
243// 0x0000001f: .cfi_def_cfa_offset: 48
244// 0x0000001f: .cfi_remember_state
245// 0x0000001f: add esp, 32
246// 0x00000022: .cfi_def_cfa_offset: 16
247// 0x00000022: pop ebp
248// 0x00000023: .cfi_def_cfa_offset: 12
249// 0x00000023: .cfi_restore: r5
250// 0x00000023: pop esi
251// 0x00000024: .cfi_def_cfa_offset: 8
252// 0x00000024: .cfi_restore: r6
253// 0x00000024: pop edi
254// 0x00000025: .cfi_def_cfa_offset: 4
255// 0x00000025: .cfi_restore: r7
256// 0x00000025: ret
257// 0x00000026: .cfi_restore_state
258// 0x00000026: .cfi_def_cfa_offset: 48
259
260static constexpr uint8_t expected_asm_kX86_64[] = {
261 0x41, 0x57, 0x41, 0x56, 0x41, 0x55, 0x41, 0x54, 0x55, 0x53, 0x48, 0x83,
262 0xEC, 0x48, 0xF2, 0x44, 0x0F, 0x11, 0x7C, 0x24, 0x40, 0xF2, 0x44, 0x0F,
263 0x11, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24, 0x30, 0xF2,
264 0x44, 0x0F, 0x11, 0x64, 0x24, 0x28, 0x89, 0x3C, 0x24, 0x89, 0xB4, 0x24,
265 0x84, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x11, 0x84, 0x24, 0x88, 0x00, 0x00,
266 0x00, 0x89, 0x94, 0x24, 0x8C, 0x00, 0x00, 0x00, 0x89, 0x8C, 0x24, 0x90,
267 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0xE0, 0x48, 0x83, 0xC4, 0x20, 0xF2,
268 0x44, 0x0F, 0x10, 0x64, 0x24, 0x28, 0xF2, 0x44, 0x0F, 0x10, 0x6C, 0x24,
269 0x30, 0xF2, 0x44, 0x0F, 0x10, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 0x10,
270 0x7C, 0x24, 0x40, 0x48, 0x83, 0xC4, 0x48, 0x5B, 0x5D, 0x41, 0x5C, 0x41,
271 0x5D, 0x41, 0x5E, 0x41, 0x5F, 0xC3,
272};
273static constexpr uint8_t expected_cfi_kX86_64[] = {
274 0x42, 0x0E, 0x10, 0x8F, 0x04, 0x42, 0x0E, 0x18, 0x8E, 0x06, 0x42, 0x0E,
275 0x20, 0x8D, 0x08, 0x42, 0x0E, 0x28, 0x8C, 0x0A, 0x41, 0x0E, 0x30, 0x86,
276 0x0C, 0x41, 0x0E, 0x38, 0x83, 0x0E, 0x44, 0x0E, 0x80, 0x01, 0x47, 0xA0,
277 0x10, 0x47, 0x9F, 0x12, 0x47, 0x9E, 0x14, 0x47, 0x9D, 0x16, 0x65, 0x0E,
278 0xA0, 0x01, 0x44, 0x0E, 0x80, 0x01, 0x0A, 0x47, 0xDD, 0x47, 0xDE, 0x47,
279 0xDF, 0x47, 0xE0, 0x44, 0x0E, 0x38, 0x41, 0x0E, 0x30, 0xC3, 0x41, 0x0E,
280 0x28, 0xC6, 0x42, 0x0E, 0x20, 0xCC, 0x42, 0x0E, 0x18, 0xCD, 0x42, 0x0E,
281 0x10, 0xCE, 0x42, 0x0E, 0x08, 0xCF, 0x41, 0x0B, 0x0E, 0x80, 0x01,
282};
283// 0x00000000: push r15
284// 0x00000002: .cfi_def_cfa_offset: 16
285// 0x00000002: .cfi_offset: r15 at cfa-16
286// 0x00000002: push r14
287// 0x00000004: .cfi_def_cfa_offset: 24
288// 0x00000004: .cfi_offset: r14 at cfa-24
289// 0x00000004: push r13
290// 0x00000006: .cfi_def_cfa_offset: 32
291// 0x00000006: .cfi_offset: r13 at cfa-32
292// 0x00000006: push r12
293// 0x00000008: .cfi_def_cfa_offset: 40
294// 0x00000008: .cfi_offset: r12 at cfa-40
295// 0x00000008: push rbp
296// 0x00000009: .cfi_def_cfa_offset: 48
297// 0x00000009: .cfi_offset: r6 at cfa-48
298// 0x00000009: push rbx
299// 0x0000000a: .cfi_def_cfa_offset: 56
300// 0x0000000a: .cfi_offset: r3 at cfa-56
301// 0x0000000a: subq rsp, 72
302// 0x0000000e: .cfi_def_cfa_offset: 128
303// 0x0000000e: movsd [rsp + 64], xmm15
304// 0x00000015: .cfi_offset: r32 at cfa-64
305// 0x00000015: movsd [rsp + 56], xmm14
306// 0x0000001c: .cfi_offset: r31 at cfa-72
307// 0x0000001c: movsd [rsp + 48], xmm13
308// 0x00000023: .cfi_offset: r30 at cfa-80
309// 0x00000023: movsd [rsp + 40], xmm12
310// 0x0000002a: .cfi_offset: r29 at cfa-88
311// 0x0000002a: mov [rsp], edi
312// 0x0000002d: mov [rsp + 132], esi
313// 0x00000034: movss [rsp + 136], xmm0
314// 0x0000003d: mov [rsp + 140], edx
315// 0x00000044: mov [rsp + 144], ecx
316// 0x0000004b: addq rsp, -32
317// 0x0000004f: .cfi_def_cfa_offset: 160
318// 0x0000004f: addq rsp, 32
319// 0x00000053: .cfi_def_cfa_offset: 128
320// 0x00000053: .cfi_remember_state
321// 0x00000053: movsd xmm12, [rsp + 40]
322// 0x0000005a: .cfi_restore: r29
323// 0x0000005a: movsd xmm13, [rsp + 48]
324// 0x00000061: .cfi_restore: r30
325// 0x00000061: movsd xmm14, [rsp + 56]
326// 0x00000068: .cfi_restore: r31
327// 0x00000068: movsd xmm15, [rsp + 64]
328// 0x0000006f: .cfi_restore: r32
329// 0x0000006f: addq rsp, 72
330// 0x00000073: .cfi_def_cfa_offset: 56
331// 0x00000073: pop rbx
332// 0x00000074: .cfi_def_cfa_offset: 48
333// 0x00000074: .cfi_restore: r3
334// 0x00000074: pop rbp
335// 0x00000075: .cfi_def_cfa_offset: 40
336// 0x00000075: .cfi_restore: r6
337// 0x00000075: pop r12
338// 0x00000077: .cfi_def_cfa_offset: 32
339// 0x00000077: .cfi_restore: r12
340// 0x00000077: pop r13
341// 0x00000079: .cfi_def_cfa_offset: 24
342// 0x00000079: .cfi_restore: r13
343// 0x00000079: pop r14
344// 0x0000007b: .cfi_def_cfa_offset: 16
345// 0x0000007b: .cfi_restore: r14
346// 0x0000007b: pop r15
347// 0x0000007d: .cfi_def_cfa_offset: 8
348// 0x0000007d: .cfi_restore: r15
349// 0x0000007d: ret
350// 0x0000007e: .cfi_restore_state
351// 0x0000007e: .cfi_def_cfa_offset: 128
352
353static constexpr uint8_t expected_asm_kMips[] = {
354 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB8, 0xAF,
355 0x34, 0x00, 0xAF, 0xAF, 0x30, 0x00, 0xAE, 0xAF, 0x2C, 0x00, 0xAD, 0xAF,
356 0x28, 0x00, 0xAC, 0xAF, 0x24, 0x00, 0xAB, 0xAF, 0x20, 0x00, 0xAA, 0xAF,
357 0x1C, 0x00, 0xA9, 0xAF, 0x18, 0x00, 0xA8, 0xAF, 0x00, 0x00, 0xA4, 0xAF,
358 0x44, 0x00, 0xA5, 0xAF, 0x48, 0x00, 0xA6, 0xAF, 0x4C, 0x00, 0xA7, 0xAF,
359 0xE0, 0xFF, 0xBD, 0x27, 0x20, 0x00, 0xBD, 0x27, 0x18, 0x00, 0xA8, 0x8F,
360 0x1C, 0x00, 0xA9, 0x8F, 0x20, 0x00, 0xAA, 0x8F, 0x24, 0x00, 0xAB, 0x8F,
361 0x28, 0x00, 0xAC, 0x8F, 0x2C, 0x00, 0xAD, 0x8F, 0x30, 0x00, 0xAE, 0x8F,
362 0x34, 0x00, 0xAF, 0x8F, 0x38, 0x00, 0xB8, 0x8F, 0x3C, 0x00, 0xBF, 0x8F,
363 0x40, 0x00, 0xBD, 0x27, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
364};
365static constexpr uint8_t expected_cfi_kMips[] = {
366 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x98, 0x02, 0x44, 0x8F, 0x03,
367 0x44, 0x8E, 0x04, 0x44, 0x8D, 0x05, 0x44, 0x8C, 0x06, 0x44, 0x8B, 0x07,
368 0x44, 0x8A, 0x08, 0x44, 0x89, 0x09, 0x44, 0x88, 0x0A, 0x54, 0x0E, 0x60,
369 0x44, 0x0E, 0x40, 0x0A, 0x44, 0xC8, 0x44, 0xC9, 0x44, 0xCA, 0x44, 0xCB,
370 0x44, 0xCC, 0x44, 0xCD, 0x44, 0xCE, 0x44, 0xCF, 0x44, 0xD8, 0x44, 0xDF,
371 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
372};
373// 0x00000000: addiu r29, r29, -64
374// 0x00000004: .cfi_def_cfa_offset: 64
375// 0x00000004: sw r31, +60(r29)
376// 0x00000008: .cfi_offset: r31 at cfa-4
377// 0x00000008: sw r24, +56(r29)
378// 0x0000000c: .cfi_offset: r24 at cfa-8
379// 0x0000000c: sw r15, +52(r29)
380// 0x00000010: .cfi_offset: r15 at cfa-12
381// 0x00000010: sw r14, +48(r29)
382// 0x00000014: .cfi_offset: r14 at cfa-16
383// 0x00000014: sw r13, +44(r29)
384// 0x00000018: .cfi_offset: r13 at cfa-20
385// 0x00000018: sw r12, +40(r29)
386// 0x0000001c: .cfi_offset: r12 at cfa-24
387// 0x0000001c: sw r11, +36(r29)
388// 0x00000020: .cfi_offset: r11 at cfa-28
389// 0x00000020: sw r10, +32(r29)
390// 0x00000024: .cfi_offset: r10 at cfa-32
391// 0x00000024: sw r9, +28(r29)
392// 0x00000028: .cfi_offset: r9 at cfa-36
393// 0x00000028: sw r8, +24(r29)
394// 0x0000002c: .cfi_offset: r8 at cfa-40
395// 0x0000002c: sw r4, +0(r29)
396// 0x00000030: sw r5, +68(r29)
397// 0x00000034: sw r6, +72(r29)
398// 0x00000038: sw r7, +76(r29)
399// 0x0000003c: addiu r29, r29, -32
400// 0x00000040: .cfi_def_cfa_offset: 96
401// 0x00000040: addiu r29, r29, 32
402// 0x00000044: .cfi_def_cfa_offset: 64
403// 0x00000044: .cfi_remember_state
404// 0x00000044: lw r8, +24(r29)
405// 0x00000048: .cfi_restore: r8
406// 0x00000048: lw r9, +28(r29)
407// 0x0000004c: .cfi_restore: r9
408// 0x0000004c: lw r10, +32(r29)
409// 0x00000050: .cfi_restore: r10
410// 0x00000050: lw r11, +36(r29)
411// 0x00000054: .cfi_restore: r11
412// 0x00000054: lw r12, +40(r29)
413// 0x00000058: .cfi_restore: r12
414// 0x00000058: lw r13, +44(r29)
415// 0x0000005c: .cfi_restore: r13
416// 0x0000005c: lw r14, +48(r29)
417// 0x00000060: .cfi_restore: r14
418// 0x00000060: lw r15, +52(r29)
419// 0x00000064: .cfi_restore: r15
420// 0x00000064: lw r24, +56(r29)
421// 0x00000068: .cfi_restore: r24
422// 0x00000068: lw r31, +60(r29)
423// 0x0000006c: .cfi_restore: r31
424// 0x0000006c: addiu r29, r29, 64
425// 0x00000070: .cfi_def_cfa_offset: 0
426// 0x00000070: jalr r0, r31
427// 0x00000074: nop
428// 0x00000078: .cfi_restore_state
429// 0x00000078: .cfi_def_cfa_offset: 64
430
431static constexpr uint8_t expected_asm_kMips64[] = {
432 0xA0, 0xFF, 0xBD, 0x67, 0x58, 0x00, 0xBF, 0xFF, 0x50, 0x00, 0xBE, 0xFF,
433 0x48, 0x00, 0xBC, 0xFF, 0x40, 0x00, 0xB7, 0xFF, 0x38, 0x00, 0xB6, 0xFF,
434 0x30, 0x00, 0xB5, 0xFF, 0x28, 0x00, 0xB4, 0xFF, 0x20, 0x00, 0xB3, 0xFF,
435 0x18, 0x00, 0xB2, 0xFF, 0x00, 0x00, 0xA4, 0xAF, 0x64, 0x00, 0xA5, 0xAF,
436 0x68, 0x00, 0xAE, 0xE7, 0x6C, 0x00, 0xA7, 0xAF, 0x70, 0x00, 0xA8, 0xAF,
437 0xE0, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBD, 0x67, 0x18, 0x00, 0xB2, 0xDF,
438 0x20, 0x00, 0xB3, 0xDF, 0x28, 0x00, 0xB4, 0xDF, 0x30, 0x00, 0xB5, 0xDF,
439 0x38, 0x00, 0xB6, 0xDF, 0x40, 0x00, 0xB7, 0xDF, 0x48, 0x00, 0xBC, 0xDF,
440 0x50, 0x00, 0xBE, 0xDF, 0x58, 0x00, 0xBF, 0xDF, 0x60, 0x00, 0xBD, 0x67,
441 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
442};
443static constexpr uint8_t expected_cfi_kMips64[] = {
444 0x44, 0x0E, 0x60, 0x44, 0x9F, 0x02, 0x44, 0x9E, 0x04, 0x44, 0x9C, 0x06,
445 0x44, 0x97, 0x08, 0x44, 0x96, 0x0A, 0x44, 0x95, 0x0C, 0x44, 0x94, 0x0E,
446 0x44, 0x93, 0x10, 0x44, 0x92, 0x12, 0x58, 0x0E, 0x80, 0x01, 0x44, 0x0E,
447 0x60, 0x0A, 0x44, 0xD2, 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6,
448 0x44, 0xD7, 0x44, 0xDC, 0x44, 0xDE, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48,
449 0x0B, 0x0E, 0x60,
450};
451// 0x00000000: daddiu r29, r29, -96
452// 0x00000004: .cfi_def_cfa_offset: 96
453// 0x00000004: sd r31, +88(r29)
454// 0x00000008: .cfi_offset: r31 at cfa-8
455// 0x00000008: sd r30, +80(r29)
456// 0x0000000c: .cfi_offset: r30 at cfa-16
457// 0x0000000c: sd r28, +72(r29)
458// 0x00000010: .cfi_offset: r28 at cfa-24
459// 0x00000010: sd r23, +64(r29)
460// 0x00000014: .cfi_offset: r23 at cfa-32
461// 0x00000014: sd r22, +56(r29)
462// 0x00000018: .cfi_offset: r22 at cfa-40
463// 0x00000018: sd r21, +48(r29)
464// 0x0000001c: .cfi_offset: r21 at cfa-48
465// 0x0000001c: sd r20, +40(r29)
466// 0x00000020: .cfi_offset: r20 at cfa-56
467// 0x00000020: sd r19, +32(r29)
468// 0x00000024: .cfi_offset: r19 at cfa-64
469// 0x00000024: sd r18, +24(r29)
470// 0x00000028: .cfi_offset: r18 at cfa-72
471// 0x00000028: sw r4, +0(r29)
472// 0x0000002c: sw r5, +100(r29)
473// 0x00000030: swc1 f14, +104(r29)
474// 0x00000034: sw r7, +108(r29)
475// 0x00000038: sw r8, +112(r29)
476// 0x0000003c: daddiu r29, r29, -32
477// 0x00000040: .cfi_def_cfa_offset: 128
478// 0x00000040: daddiu r29, r29, 32
479// 0x00000044: .cfi_def_cfa_offset: 96
480// 0x00000044: .cfi_remember_state
481// 0x00000044: ld r18, +24(r29)
482// 0x00000048: .cfi_restore: r18
483// 0x00000048: ld r19, +32(r29)
484// 0x0000004c: .cfi_restore: r19
485// 0x0000004c: ld r20, +40(r29)
486// 0x00000050: .cfi_restore: r20
487// 0x00000050: ld r21, +48(r29)
488// 0x00000054: .cfi_restore: r21
489// 0x00000054: ld r22, +56(r29)
490// 0x00000058: .cfi_restore: r22
491// 0x00000058: ld r23, +64(r29)
492// 0x0000005c: .cfi_restore: r23
493// 0x0000005c: ld r28, +72(r29)
494// 0x00000060: .cfi_restore: r28
495// 0x00000060: ld r30, +80(r29)
496// 0x00000064: .cfi_restore: r30
497// 0x00000064: ld r31, +88(r29)
498// 0x00000068: .cfi_restore: r31
499// 0x00000068: daddiu r29, r29, 96
500// 0x0000006c: .cfi_def_cfa_offset: 0
501// 0x0000006c: jr r31
502// 0x00000070: nop
503// 0x00000074: .cfi_restore_state
504// 0x00000074: .cfi_def_cfa_offset: 96
505