blob: 4571ebf2d47928dc16c08f950e92386019422121 [file] [log] [blame]
David Srbeckyc6b4dd82015-04-07 20:32:43 +01001static constexpr uint8_t expected_asm_kThumb2[] = {
2 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x90, 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, 0x42, 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: str r0, [sp, #0]
23// 0x0000000a: .cfi_remember_state
24// 0x0000000a: add sp, sp, #44
25// 0x0000000c: .cfi_def_cfa_offset: 20
26// 0x0000000c: vpop.f32 {s16-s17}
27// 0x00000010: .cfi_def_cfa_offset: 12
28// 0x00000010: .cfi_restore_extended: r80
29// 0x00000010: .cfi_restore_extended: r81
30// 0x00000010: pop {r5, r6, pc}
31// 0x00000012: .cfi_restore_state
32// 0x00000012: .cfi_def_cfa_offset: 64
33
34static constexpr uint8_t expected_asm_kArm64[] = {
Mathieu Chartiere401d142015-04-22 13:56:20 -070035 0xE0, 0x0F, 0x1C, 0xF8, 0xF4, 0xD7, 0x02, 0xA9, 0xFE, 0x1F, 0x00, 0xF9,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010036 0xE8, 0xA7, 0x01, 0x6D, 0xE8, 0xA7, 0x41, 0x6D, 0xF4, 0xD7, 0x42, 0xA9,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010037 0xFE, 0x1F, 0x40, 0xF9, 0xFF, 0x03, 0x01, 0x91, 0xC0, 0x03, 0x5F, 0xD6,
38};
39static constexpr uint8_t expected_cfi_kArm64[] = {
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010040 0x44, 0x0E, 0x40, 0x44, 0x94, 0x06, 0x95, 0x04, 0x44, 0x9E, 0x02, 0x44,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010041 0x05, 0x48, 0x0A, 0x05, 0x49, 0x08, 0x0A, 0x44, 0x06, 0x48, 0x06, 0x49,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010042 0x44, 0xD4, 0xD5, 0x44, 0xDE, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0x40,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010043};
Mathieu Chartiere401d142015-04-22 13:56:20 -070044// 0x00000000: str x0, [sp, #-64]!
David Srbeckyc6b4dd82015-04-07 20:32:43 +010045// 0x00000004: .cfi_def_cfa_offset: 64
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010046// 0x00000004: stp x20, x21, [sp, #40]
47// 0x00000008: .cfi_offset: r20 at cfa-24
48// 0x00000008: .cfi_offset: r21 at cfa-16
David Srbeckyc6b4dd82015-04-07 20:32:43 +010049// 0x00000008: str lr, [sp, #56]
50// 0x0000000c: .cfi_offset: r30 at cfa-8
51// 0x0000000c: stp d8, d9, [sp, #24]
52// 0x00000010: .cfi_offset_extended: r72 at cfa-40
53// 0x00000010: .cfi_offset_extended: r73 at cfa-32
54// 0x00000010: .cfi_remember_state
55// 0x00000010: ldp d8, d9, [sp, #24]
56// 0x00000014: .cfi_restore_extended: r72
57// 0x00000014: .cfi_restore_extended: r73
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010058// 0x00000014: ldp x20, x21, [sp, #40]
David Srbeckyc6b4dd82015-04-07 20:32:43 +010059// 0x00000018: .cfi_restore: r20
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010060// 0x00000018: .cfi_restore: r21
David Srbeckyc6b4dd82015-04-07 20:32:43 +010061// 0x00000018: ldr lr, [sp, #56]
62// 0x0000001c: .cfi_restore: r30
63// 0x0000001c: add sp, sp, #0x40 (64)
64// 0x00000020: .cfi_def_cfa_offset: 0
65// 0x00000020: ret
66// 0x00000024: .cfi_restore_state
67// 0x00000024: .cfi_def_cfa_offset: 64
68
69static constexpr uint8_t expected_asm_kX86[] = {
70 0x56, 0x55, 0x83, 0xEC, 0x34, 0x89, 0x04, 0x24, 0x83, 0xC4, 0x34, 0x5D,
71 0x5E, 0xC3,
72};
73static constexpr uint8_t expected_cfi_kX86[] = {
74 0x41, 0x0E, 0x08, 0x86, 0x02, 0x41, 0x0E, 0x0C, 0x85, 0x03, 0x43, 0x0E,
75 0x40, 0x43, 0x0A, 0x43, 0x0E, 0x0C, 0x41, 0x0E, 0x08, 0xC5, 0x41, 0x0E,
76 0x04, 0xC6, 0x41, 0x0B, 0x0E, 0x40,
77};
78// 0x00000000: push esi
79// 0x00000001: .cfi_def_cfa_offset: 8
80// 0x00000001: .cfi_offset: r6 at cfa-8
81// 0x00000001: push ebp
82// 0x00000002: .cfi_def_cfa_offset: 12
83// 0x00000002: .cfi_offset: r5 at cfa-12
84// 0x00000002: sub esp, 52
85// 0x00000005: .cfi_def_cfa_offset: 64
86// 0x00000005: mov [esp], eax
87// 0x00000008: .cfi_remember_state
88// 0x00000008: add esp, 52
89// 0x0000000b: .cfi_def_cfa_offset: 12
90// 0x0000000b: pop ebp
91// 0x0000000c: .cfi_def_cfa_offset: 8
92// 0x0000000c: .cfi_restore: r5
93// 0x0000000c: pop esi
94// 0x0000000d: .cfi_def_cfa_offset: 4
95// 0x0000000d: .cfi_restore: r6
96// 0x0000000d: ret
97// 0x0000000e: .cfi_restore_state
98// 0x0000000e: .cfi_def_cfa_offset: 64
99
100static constexpr uint8_t expected_asm_kX86_64[] = {
101 0x55, 0x53, 0x48, 0x83, 0xEC, 0x28, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700102 0x20, 0xF2, 0x44, 0x0F, 0x11, 0x64, 0x24, 0x18, 0x48, 0x89, 0x3C, 0x24,
103 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x18, 0xF2, 0x44, 0x0F, 0x10, 0x6C,
104 0x24, 0x20, 0x48, 0x83, 0xC4, 0x28, 0x5B, 0x5D, 0xC3,
David Srbeckyc6b4dd82015-04-07 20:32:43 +0100105};
106static constexpr uint8_t expected_cfi_kX86_64[] = {
107 0x41, 0x0E, 0x10, 0x86, 0x04, 0x41, 0x0E, 0x18, 0x83, 0x06, 0x44, 0x0E,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700108 0x40, 0x47, 0x9E, 0x08, 0x47, 0x9D, 0x0A, 0x44, 0x0A, 0x47, 0xDD, 0x47,
David Srbeckyc6b4dd82015-04-07 20:32:43 +0100109 0xDE, 0x44, 0x0E, 0x18, 0x41, 0x0E, 0x10, 0xC3, 0x41, 0x0E, 0x08, 0xC6,
110 0x41, 0x0B, 0x0E, 0x40,
111};
112// 0x00000000: push rbp
113// 0x00000001: .cfi_def_cfa_offset: 16
114// 0x00000001: .cfi_offset: r6 at cfa-16
115// 0x00000001: push rbx
116// 0x00000002: .cfi_def_cfa_offset: 24
117// 0x00000002: .cfi_offset: r3 at cfa-24
118// 0x00000002: subq rsp, 40
119// 0x00000006: .cfi_def_cfa_offset: 64
120// 0x00000006: movsd [rsp + 32], xmm13
121// 0x0000000d: .cfi_offset: r30 at cfa-32
122// 0x0000000d: movsd [rsp + 24], xmm12
123// 0x00000014: .cfi_offset: r29 at cfa-40
Mathieu Chartiere401d142015-04-22 13:56:20 -0700124// 0x00000014: movq [rsp], rdi
125// 0x00000018: .cfi_remember_state
126// 0x00000018: movsd xmm12, [rsp + 24]
127// 0x0000001f: .cfi_restore: r29
128// 0x0000001f: movsd xmm13, [rsp + 32]
129// 0x00000026: .cfi_restore: r30
130// 0x00000026: addq rsp, 40
131// 0x0000002a: .cfi_def_cfa_offset: 24
132// 0x0000002a: pop rbx
133// 0x0000002b: .cfi_def_cfa_offset: 16
134// 0x0000002b: .cfi_restore: r3
135// 0x0000002b: pop rbp
136// 0x0000002c: .cfi_def_cfa_offset: 8
137// 0x0000002c: .cfi_restore: r6
138// 0x0000002c: ret
139// 0x0000002d: .cfi_restore_state
140// 0x0000002d: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100141
142static constexpr uint8_t expected_asm_kMips[] = {
143 0xE4, 0xFF, 0xBD, 0x27, 0x18, 0x00, 0xBF, 0xAF, 0x14, 0x00, 0xB1, 0xAF,
144 0x10, 0x00, 0xB0, 0xAF, 0x08, 0x00, 0xB6, 0xE7, 0x0C, 0x00, 0xB7, 0xE7,
145 0x00, 0x00, 0xB4, 0xE7, 0x04, 0x00, 0xB5, 0xE7, 0xDC, 0xFF, 0xBD, 0x27,
146 0x00, 0x00, 0xA4, 0xAF, 0x24, 0x00, 0xBD, 0x27, 0x00, 0x00, 0xB4, 0xC7,
147 0x04, 0x00, 0xB5, 0xC7, 0x08, 0x00, 0xB6, 0xC7, 0x0C, 0x00, 0xB7, 0xC7,
148 0x10, 0x00, 0xB0, 0x8F, 0x14, 0x00, 0xB1, 0x8F, 0x18, 0x00, 0xBF, 0x8F,
149 0x1C, 0x00, 0xBD, 0x27, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
150};
151static constexpr uint8_t expected_cfi_kMips[] = {
152 0x44, 0x0E, 0x1C, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
153 0x54, 0x0E, 0x40, 0x44, 0x0A, 0x44, 0x0E, 0x1C, 0x54, 0xD0, 0x44, 0xD1,
154 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
155};
156// 0x00000000: addiu r29, r29, -28
157// 0x00000004: .cfi_def_cfa_offset: 28
158// 0x00000004: sw r31, +24(r29)
159// 0x00000008: .cfi_offset: r31 at cfa-4
160// 0x00000008: sw r17, +20(r29)
161// 0x0000000c: .cfi_offset: r17 at cfa-8
162// 0x0000000c: sw r16, +16(r29)
163// 0x00000010: .cfi_offset: r16 at cfa-12
164// 0x00000010: swc1 f22, +8(r29)
165// 0x00000014: swc1 f23, +12(r29)
166// 0x00000018: swc1 f20, +0(r29)
167// 0x0000001c: swc1 f21, +4(r29)
168// 0x00000020: addiu r29, r29, -36
169// 0x00000024: .cfi_def_cfa_offset: 64
170// 0x00000024: sw r4, +0(r29)
171// 0x00000028: .cfi_remember_state
172// 0x00000028: addiu r29, r29, 36
173// 0x0000002c: .cfi_def_cfa_offset: 28
174// 0x0000002c: lwc1 f20, +0(r29)
175// 0x00000030: lwc1 f21, +4(r29)
176// 0x00000034: lwc1 f22, +8(r29)
177// 0x00000038: lwc1 f23, +12(r29)
178// 0x0000003c: lw r16, +16(r29)
179// 0x00000040: .cfi_restore: r16
180// 0x00000040: lw r17, +20(r29)
181// 0x00000044: .cfi_restore: r17
182// 0x00000044: lw r31, +24(r29)
183// 0x00000048: .cfi_restore: r31
184// 0x00000048: addiu r29, r29, 28
185// 0x0000004c: .cfi_def_cfa_offset: 0
186// 0x0000004c: jr r31
187// 0x00000050: nop
188// 0x00000054: .cfi_restore_state
189// 0x00000054: .cfi_def_cfa_offset: 64
190
191static constexpr uint8_t expected_asm_kMips64[] = {
192 0xD8, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBF, 0xFF, 0x18, 0x00, 0xB1, 0xFF,
193 0x10, 0x00, 0xB0, 0xFF, 0x08, 0x00, 0xB9, 0xF7, 0x00, 0x00, 0xB8, 0xF7,
194 0xE8, 0xFF, 0xBD, 0x67, 0x00, 0x00, 0xA4, 0xFF, 0x18, 0x00, 0xBD, 0x67,
195 0x00, 0x00, 0xB8, 0xD7, 0x08, 0x00, 0xB9, 0xD7, 0x10, 0x00, 0xB0, 0xDF,
196 0x18, 0x00, 0xB1, 0xDF, 0x20, 0x00, 0xBF, 0xDF, 0x28, 0x00, 0xBD, 0x67,
197 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
198};
199static constexpr uint8_t expected_cfi_kMips64[] = {
200 0x44, 0x0E, 0x28, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
201 0x4C, 0x0E, 0x40, 0x44, 0x0A, 0x44, 0x0E, 0x28, 0x4C, 0xD0, 0x44, 0xD1,
202 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
203};
204// 0x00000000: daddiu r29, r29, -40
205// 0x00000004: .cfi_def_cfa_offset: 40
206// 0x00000004: sd r31, +32(r29)
207// 0x00000008: .cfi_offset: r31 at cfa-8
208// 0x00000008: sd r17, +24(r29)
209// 0x0000000c: .cfi_offset: r17 at cfa-16
210// 0x0000000c: sd r16, +16(r29)
211// 0x00000010: .cfi_offset: r16 at cfa-24
212// 0x00000010: sdc1 f25, +8(r29)
213// 0x00000014: sdc1 f24, +0(r29)
214// 0x00000018: daddiu r29, r29, -24
215// 0x0000001c: .cfi_def_cfa_offset: 64
216// 0x0000001c: sd r4, +0(r29)
217// 0x00000020: .cfi_remember_state
218// 0x00000020: daddiu r29, r29, 24
219// 0x00000024: .cfi_def_cfa_offset: 40
220// 0x00000024: ldc1 f24, +0(r29)
221// 0x00000028: ldc1 f25, +8(r29)
222// 0x0000002c: ld r16, +16(r29)
223// 0x00000030: .cfi_restore: r16
224// 0x00000030: ld r17, +24(r29)
225// 0x00000034: .cfi_restore: r17
226// 0x00000034: ld r31, +32(r29)
227// 0x00000038: .cfi_restore: r31
228// 0x00000038: daddiu r29, r29, 40
229// 0x0000003c: .cfi_def_cfa_offset: 0
230// 0x0000003c: jr r31
231// 0x00000040: nop
232// 0x00000044: .cfi_restore_state
233// 0x00000044: .cfi_def_cfa_offset: 64
234
235static constexpr uint8_t expected_asm_kThumb2_adjust[] = {
236 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x90, 0x00, 0x28,
237 0x40, 0xD0, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
238 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
239 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
240 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
241 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
242 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
243 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
244 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
245 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
246 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
247 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
248 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD,
249};
250static constexpr uint8_t expected_cfi_kThumb2_adjust[] = {
251 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14,
252 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A,
253 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B,
254 0x0E, 0x40,
255};
256// 0x00000000: push {r5, r6, lr}
257// 0x00000002: .cfi_def_cfa_offset: 12
258// 0x00000002: .cfi_offset: r5 at cfa-12
259// 0x00000002: .cfi_offset: r6 at cfa-8
260// 0x00000002: .cfi_offset: r14 at cfa-4
261// 0x00000002: vpush.f32 {s16-s17}
262// 0x00000006: .cfi_def_cfa_offset: 20
263// 0x00000006: .cfi_offset_extended: r80 at cfa-20
264// 0x00000006: .cfi_offset_extended: r81 at cfa-16
265// 0x00000006: sub sp, sp, #44
266// 0x00000008: .cfi_def_cfa_offset: 64
267// 0x00000008: str r0, [sp, #0]
268// 0x0000000a: cmp r0, #0
269// 0x0000000c: beq +128 (0x00000090)
270// 0x0000000e: ldr r0, [r0, #0]
271// 0x00000010: ldr r0, [r0, #0]
272// 0x00000012: ldr r0, [r0, #0]
273// 0x00000014: ldr r0, [r0, #0]
274// 0x00000016: ldr r0, [r0, #0]
275// 0x00000018: ldr r0, [r0, #0]
276// 0x0000001a: ldr r0, [r0, #0]
277// 0x0000001c: ldr r0, [r0, #0]
278// 0x0000001e: ldr r0, [r0, #0]
279// 0x00000020: ldr r0, [r0, #0]
280// 0x00000022: ldr r0, [r0, #0]
281// 0x00000024: ldr r0, [r0, #0]
282// 0x00000026: ldr r0, [r0, #0]
283// 0x00000028: ldr r0, [r0, #0]
284// 0x0000002a: ldr r0, [r0, #0]
285// 0x0000002c: ldr r0, [r0, #0]
286// 0x0000002e: ldr r0, [r0, #0]
287// 0x00000030: ldr r0, [r0, #0]
288// 0x00000032: ldr r0, [r0, #0]
289// 0x00000034: ldr r0, [r0, #0]
290// 0x00000036: ldr r0, [r0, #0]
291// 0x00000038: ldr r0, [r0, #0]
292// 0x0000003a: ldr r0, [r0, #0]
293// 0x0000003c: ldr r0, [r0, #0]
294// 0x0000003e: ldr r0, [r0, #0]
295// 0x00000040: ldr r0, [r0, #0]
296// 0x00000042: ldr r0, [r0, #0]
297// 0x00000044: ldr r0, [r0, #0]
298// 0x00000046: ldr r0, [r0, #0]
299// 0x00000048: ldr r0, [r0, #0]
300// 0x0000004a: ldr r0, [r0, #0]
301// 0x0000004c: ldr r0, [r0, #0]
302// 0x0000004e: ldr r0, [r0, #0]
303// 0x00000050: ldr r0, [r0, #0]
304// 0x00000052: ldr r0, [r0, #0]
305// 0x00000054: ldr r0, [r0, #0]
306// 0x00000056: ldr r0, [r0, #0]
307// 0x00000058: ldr r0, [r0, #0]
308// 0x0000005a: ldr r0, [r0, #0]
309// 0x0000005c: ldr r0, [r0, #0]
310// 0x0000005e: ldr r0, [r0, #0]
311// 0x00000060: ldr r0, [r0, #0]
312// 0x00000062: ldr r0, [r0, #0]
313// 0x00000064: ldr r0, [r0, #0]
314// 0x00000066: ldr r0, [r0, #0]
315// 0x00000068: ldr r0, [r0, #0]
316// 0x0000006a: ldr r0, [r0, #0]
317// 0x0000006c: ldr r0, [r0, #0]
318// 0x0000006e: ldr r0, [r0, #0]
319// 0x00000070: ldr r0, [r0, #0]
320// 0x00000072: ldr r0, [r0, #0]
321// 0x00000074: ldr r0, [r0, #0]
322// 0x00000076: ldr r0, [r0, #0]
323// 0x00000078: ldr r0, [r0, #0]
324// 0x0000007a: ldr r0, [r0, #0]
325// 0x0000007c: ldr r0, [r0, #0]
326// 0x0000007e: ldr r0, [r0, #0]
327// 0x00000080: ldr r0, [r0, #0]
328// 0x00000082: ldr r0, [r0, #0]
329// 0x00000084: ldr r0, [r0, #0]
330// 0x00000086: ldr r0, [r0, #0]
331// 0x00000088: ldr r0, [r0, #0]
332// 0x0000008a: ldr r0, [r0, #0]
333// 0x0000008c: ldr r0, [r0, #0]
334// 0x0000008e: ldr r0, [r0, #0]
335// 0x00000090: .cfi_remember_state
336// 0x00000090: add sp, sp, #44
337// 0x00000092: .cfi_def_cfa_offset: 20
338// 0x00000092: vpop.f32 {s16-s17}
339// 0x00000096: .cfi_def_cfa_offset: 12
340// 0x00000096: .cfi_restore_extended: r80
341// 0x00000096: .cfi_restore_extended: r81
342// 0x00000096: pop {r5, r6, pc}
343// 0x00000098: .cfi_restore_state
344// 0x00000098: .cfi_def_cfa_offset: 64
345
346static constexpr uint8_t expected_asm_kMips_adjust_head[] = {
347 0xE4, 0xFF, 0xBD, 0x27, 0x18, 0x00, 0xBF, 0xAF, 0x14, 0x00, 0xB1, 0xAF,
348 0x10, 0x00, 0xB0, 0xAF, 0x08, 0x00, 0xB6, 0xE7, 0x0C, 0x00, 0xB7, 0xE7,
349 0x00, 0x00, 0xB4, 0xE7, 0x04, 0x00, 0xB5, 0xE7, 0xDC, 0xFF, 0xBD, 0x27,
350 0x00, 0x00, 0xA4, 0xAF, 0x08, 0x00, 0x04, 0x14, 0xFC, 0xFF, 0xBD, 0x27,
351 0x00, 0x00, 0xBF, 0xAF, 0x00, 0x00, 0x10, 0x04, 0x02, 0x00, 0x01, 0x3C,
352 0x18, 0x00, 0x21, 0x34, 0x21, 0x08, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x8F,
353 0x09, 0x00, 0x20, 0x00, 0x04, 0x00, 0xBD, 0x27,
354};
355static constexpr uint8_t expected_asm_kMips_adjust_tail[] = {
356 0x24, 0x00, 0xBD, 0x27, 0x00, 0x00, 0xB4, 0xC7, 0x04, 0x00, 0xB5, 0xC7,
357 0x08, 0x00, 0xB6, 0xC7, 0x0C, 0x00, 0xB7, 0xC7, 0x10, 0x00, 0xB0, 0x8F,
358 0x14, 0x00, 0xB1, 0x8F, 0x18, 0x00, 0xBF, 0x8F, 0x1C, 0x00, 0xBD, 0x27,
359 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
360};
361static constexpr uint8_t expected_cfi_kMips_adjust[] = {
362 0x44, 0x0E, 0x1C, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
363 0x54, 0x0E, 0x40, 0x4C, 0x0E, 0x44, 0x60, 0x0E, 0x40, 0x04, 0x04, 0x00,
364 0x02, 0x00, 0x0A, 0x44, 0x0E, 0x1C, 0x54, 0xD0, 0x44, 0xD1, 0x44, 0xDF,
365 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
366};
367// 0x00000000: addiu r29, r29, -28
368// 0x00000004: .cfi_def_cfa_offset: 28
369// 0x00000004: sw r31, +24(r29)
370// 0x00000008: .cfi_offset: r31 at cfa-4
371// 0x00000008: sw r17, +20(r29)
372// 0x0000000c: .cfi_offset: r17 at cfa-8
373// 0x0000000c: sw r16, +16(r29)
374// 0x00000010: .cfi_offset: r16 at cfa-12
375// 0x00000010: swc1 f22, +8(r29)
376// 0x00000014: swc1 f23, +12(r29)
377// 0x00000018: swc1 f20, +0(r29)
378// 0x0000001c: swc1 f21, +4(r29)
379// 0x00000020: addiu r29, r29, -36
380// 0x00000024: .cfi_def_cfa_offset: 64
381// 0x00000024: sw r4, +0(r29)
382// 0x00000028: bne r0, r4, 0x0000004c ; +36
383// 0x0000002c: addiu r29, r29, -4
384// 0x00000030: .cfi_def_cfa_offset: 68
385// 0x00000030: sw r31, +0(r29)
386// 0x00000034: bltzal r0, 0x00000038 ; +4
387// 0x00000038: lui r1, 0x20000
388// 0x0000003c: ori r1, r1, 24
389// 0x00000040: addu r1, r1, r31
390// 0x00000044: lw r31, +0(r29)
391// 0x00000048: jr r1
392// 0x0000004c: addiu r29, r29, 4
393// 0x00000050: .cfi_def_cfa_offset: 64
394// 0x00000050: nop
395// ...
396// 0x00020050: nop
397// 0x00020054: .cfi_remember_state
398// 0x00020054: addiu r29, r29, 36
399// 0x00020058: .cfi_def_cfa_offset: 28
400// 0x00020058: lwc1 f20, +0(r29)
401// 0x0002005c: lwc1 f21, +4(r29)
402// 0x00020060: lwc1 f22, +8(r29)
403// 0x00020064: lwc1 f23, +12(r29)
404// 0x00020068: lw r16, +16(r29)
405// 0x0002006c: .cfi_restore: r16
406// 0x0002006c: lw r17, +20(r29)
407// 0x00020070: .cfi_restore: r17
408// 0x00020070: lw r31, +24(r29)
409// 0x00020074: .cfi_restore: r31
410// 0x00020074: addiu r29, r29, 28
411// 0x00020078: .cfi_def_cfa_offset: 0
412// 0x00020078: jr r31
413// 0x0002007c: nop
414// 0x00020080: .cfi_restore_state
415// 0x00020080: .cfi_def_cfa_offset: 64