blob: 05eb06333e129dc8e94005ea53479f49ce804482 [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[] = {
Anton Kirilovbde6ae12016-06-10 17:46:12 +010035 0xE0, 0x0F, 0x1C, 0xF8, 0xF4, 0x17, 0x00, 0xF9, 0xF5, 0x7B, 0x03, 0xA9,
36 0xE8, 0xA7, 0x01, 0x6D, 0xE8, 0xA7, 0x41, 0x6D, 0xF4, 0x17, 0x40, 0xF9,
37 0xF5, 0x7B, 0x43, 0xA9, 0xFF, 0x03, 0x01, 0x91, 0xC0, 0x03, 0x5F, 0xD6,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010038};
39static constexpr uint8_t expected_cfi_kArm64[] = {
Anton Kirilovbde6ae12016-06-10 17:46:12 +010040 0x44, 0x0E, 0x40, 0x44, 0x94, 0x06, 0x44, 0x95, 0x04, 0x9E, 0x02, 0x44,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010041 0x05, 0x48, 0x0A, 0x05, 0x49, 0x08, 0x0A, 0x44, 0x06, 0x48, 0x06, 0x49,
Anton Kirilovbde6ae12016-06-10 17:46:12 +010042 0x44, 0xD4, 0x44, 0xD5, 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
Anton Kirilovbde6ae12016-06-10 17:46:12 +010046// 0x00000004: str x20, [sp, #40]
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010047// 0x00000008: .cfi_offset: r20 at cfa-24
Anton Kirilovbde6ae12016-06-10 17:46:12 +010048// 0x00000008: stp x21, lr, [sp, #48]
49// 0x0000000c: .cfi_offset: r21 at cfa-16
David Srbeckyc6b4dd82015-04-07 20:32:43 +010050// 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
Anton Kirilovbde6ae12016-06-10 17:46:12 +010058// 0x00000014: ldr x20, [sp, #40]
David Srbeckyc6b4dd82015-04-07 20:32:43 +010059// 0x00000018: .cfi_restore: r20
Anton Kirilovbde6ae12016-06-10 17:46:12 +010060// 0x00000018: ldp x21, lr, [sp, #48]
61// 0x0000001c: .cfi_restore: r21
David Srbeckyc6b4dd82015-04-07 20:32:43 +010062// 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[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700143 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB1, 0xAF,
144 0x34, 0x00, 0xB0, 0xAF, 0x28, 0x00, 0xB6, 0xF7, 0x20, 0x00, 0xB4, 0xF7,
145 0x00, 0x00, 0xA4, 0xAF, 0x3C, 0x00, 0xBF, 0x8F, 0x38, 0x00, 0xB1, 0x8F,
146 0x34, 0x00, 0xB0, 0x8F, 0x28, 0x00, 0xB6, 0xD7, 0x20, 0x00, 0xB4, 0xD7,
147 0x40, 0x00, 0xBD, 0x27, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100148};
149static constexpr uint8_t expected_cfi_kMips[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700150 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
151 0x4C, 0x0A, 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x4C, 0x0E, 0x00, 0x48,
152 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100153};
Alexey Frunze73296a72016-06-03 22:51:46 -0700154// 0x00000000: addiu r29, r29, -64
155// 0x00000004: .cfi_def_cfa_offset: 64
156// 0x00000004: sw r31, +60(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100157// 0x00000008: .cfi_offset: r31 at cfa-4
Alexey Frunze73296a72016-06-03 22:51:46 -0700158// 0x00000008: sw r17, +56(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100159// 0x0000000c: .cfi_offset: r17 at cfa-8
Alexey Frunze73296a72016-06-03 22:51:46 -0700160// 0x0000000c: sw r16, +52(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100161// 0x00000010: .cfi_offset: r16 at cfa-12
Alexey Frunze73296a72016-06-03 22:51:46 -0700162// 0x00000010: sdc1 f22, +40(r29)
163// 0x00000014: sdc1 f20, +32(r29)
164// 0x00000018: sw r4, +0(r29)
165// 0x0000001c: .cfi_remember_state
166// 0x0000001c: lw r31, +60(r29)
167// 0x00000020: .cfi_restore: r31
168// 0x00000020: lw r17, +56(r29)
169// 0x00000024: .cfi_restore: r17
170// 0x00000024: lw r16, +52(r29)
171// 0x00000028: .cfi_restore: r16
172// 0x00000028: ldc1 f22, +40(r29)
173// 0x0000002c: ldc1 f20, +32(r29)
174// 0x00000030: addiu r29, r29, 64
175// 0x00000034: .cfi_def_cfa_offset: 0
176// 0x00000034: jr r31
177// 0x00000038: nop
178// 0x0000003c: .cfi_restore_state
179// 0x0000003c: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100180
181static constexpr uint8_t expected_asm_kMips64[] = {
182 0xD8, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBF, 0xFF, 0x18, 0x00, 0xB1, 0xFF,
183 0x10, 0x00, 0xB0, 0xFF, 0x08, 0x00, 0xB9, 0xF7, 0x00, 0x00, 0xB8, 0xF7,
184 0xE8, 0xFF, 0xBD, 0x67, 0x00, 0x00, 0xA4, 0xFF, 0x18, 0x00, 0xBD, 0x67,
185 0x00, 0x00, 0xB8, 0xD7, 0x08, 0x00, 0xB9, 0xD7, 0x10, 0x00, 0xB0, 0xDF,
186 0x18, 0x00, 0xB1, 0xDF, 0x20, 0x00, 0xBF, 0xDF, 0x28, 0x00, 0xBD, 0x67,
187 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
188};
189static constexpr uint8_t expected_cfi_kMips64[] = {
190 0x44, 0x0E, 0x28, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
David Srbeckyba702002016-02-01 18:15:29 +0000191 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x44, 0x0E, 0x40, 0x44, 0x0A, 0x44,
192 0x0E, 0x28, 0x44, 0xF8, 0x44, 0xF9, 0x44, 0xD0, 0x44, 0xD1, 0x44, 0xDF,
193 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100194};
195// 0x00000000: daddiu r29, r29, -40
196// 0x00000004: .cfi_def_cfa_offset: 40
197// 0x00000004: sd r31, +32(r29)
198// 0x00000008: .cfi_offset: r31 at cfa-8
199// 0x00000008: sd r17, +24(r29)
200// 0x0000000c: .cfi_offset: r17 at cfa-16
201// 0x0000000c: sd r16, +16(r29)
202// 0x00000010: .cfi_offset: r16 at cfa-24
203// 0x00000010: sdc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000204// 0x00000014: .cfi_offset: r57 at cfa-32
Vladimir Marko10ef6942015-10-22 15:25:54 +0100205// 0x00000014: sdc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000206// 0x00000018: .cfi_offset: r56 at cfa-40
Vladimir Marko10ef6942015-10-22 15:25:54 +0100207// 0x00000018: daddiu r29, r29, -24
208// 0x0000001c: .cfi_def_cfa_offset: 64
209// 0x0000001c: sd r4, +0(r29)
210// 0x00000020: .cfi_remember_state
211// 0x00000020: daddiu r29, r29, 24
212// 0x00000024: .cfi_def_cfa_offset: 40
213// 0x00000024: ldc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000214// 0x00000028: .cfi_restore: r56
Vladimir Marko10ef6942015-10-22 15:25:54 +0100215// 0x00000028: ldc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000216// 0x0000002c: .cfi_restore: r57
Vladimir Marko10ef6942015-10-22 15:25:54 +0100217// 0x0000002c: ld r16, +16(r29)
218// 0x00000030: .cfi_restore: r16
219// 0x00000030: ld r17, +24(r29)
220// 0x00000034: .cfi_restore: r17
221// 0x00000034: ld r31, +32(r29)
222// 0x00000038: .cfi_restore: r31
223// 0x00000038: daddiu r29, r29, 40
224// 0x0000003c: .cfi_def_cfa_offset: 0
225// 0x0000003c: jr r31
226// 0x00000040: nop
227// 0x00000044: .cfi_restore_state
228// 0x00000044: .cfi_def_cfa_offset: 64
229
230static constexpr uint8_t expected_asm_kThumb2_adjust[] = {
231 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x90, 0x00, 0x28,
232 0x40, 0xD0, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
233 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
234 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
235 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
236 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
237 0x00, 0x68, 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 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD,
244};
245static constexpr uint8_t expected_cfi_kThumb2_adjust[] = {
246 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14,
247 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A,
248 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B,
249 0x0E, 0x40,
250};
251// 0x00000000: push {r5, r6, lr}
252// 0x00000002: .cfi_def_cfa_offset: 12
253// 0x00000002: .cfi_offset: r5 at cfa-12
254// 0x00000002: .cfi_offset: r6 at cfa-8
255// 0x00000002: .cfi_offset: r14 at cfa-4
256// 0x00000002: vpush.f32 {s16-s17}
257// 0x00000006: .cfi_def_cfa_offset: 20
258// 0x00000006: .cfi_offset_extended: r80 at cfa-20
259// 0x00000006: .cfi_offset_extended: r81 at cfa-16
260// 0x00000006: sub sp, sp, #44
261// 0x00000008: .cfi_def_cfa_offset: 64
262// 0x00000008: str r0, [sp, #0]
263// 0x0000000a: cmp r0, #0
264// 0x0000000c: beq +128 (0x00000090)
265// 0x0000000e: ldr r0, [r0, #0]
266// 0x00000010: ldr r0, [r0, #0]
267// 0x00000012: ldr r0, [r0, #0]
268// 0x00000014: ldr r0, [r0, #0]
269// 0x00000016: ldr r0, [r0, #0]
270// 0x00000018: ldr r0, [r0, #0]
271// 0x0000001a: ldr r0, [r0, #0]
272// 0x0000001c: ldr r0, [r0, #0]
273// 0x0000001e: ldr r0, [r0, #0]
274// 0x00000020: ldr r0, [r0, #0]
275// 0x00000022: ldr r0, [r0, #0]
276// 0x00000024: ldr r0, [r0, #0]
277// 0x00000026: ldr r0, [r0, #0]
278// 0x00000028: ldr r0, [r0, #0]
279// 0x0000002a: ldr r0, [r0, #0]
280// 0x0000002c: ldr r0, [r0, #0]
281// 0x0000002e: ldr r0, [r0, #0]
282// 0x00000030: ldr r0, [r0, #0]
283// 0x00000032: ldr r0, [r0, #0]
284// 0x00000034: ldr r0, [r0, #0]
285// 0x00000036: ldr r0, [r0, #0]
286// 0x00000038: ldr r0, [r0, #0]
287// 0x0000003a: ldr r0, [r0, #0]
288// 0x0000003c: ldr r0, [r0, #0]
289// 0x0000003e: ldr r0, [r0, #0]
290// 0x00000040: ldr r0, [r0, #0]
291// 0x00000042: ldr r0, [r0, #0]
292// 0x00000044: ldr r0, [r0, #0]
293// 0x00000046: ldr r0, [r0, #0]
294// 0x00000048: ldr r0, [r0, #0]
295// 0x0000004a: ldr r0, [r0, #0]
296// 0x0000004c: ldr r0, [r0, #0]
297// 0x0000004e: ldr r0, [r0, #0]
298// 0x00000050: ldr r0, [r0, #0]
299// 0x00000052: ldr r0, [r0, #0]
300// 0x00000054: ldr r0, [r0, #0]
301// 0x00000056: ldr r0, [r0, #0]
302// 0x00000058: ldr r0, [r0, #0]
303// 0x0000005a: ldr r0, [r0, #0]
304// 0x0000005c: ldr r0, [r0, #0]
305// 0x0000005e: ldr r0, [r0, #0]
306// 0x00000060: ldr r0, [r0, #0]
307// 0x00000062: ldr r0, [r0, #0]
308// 0x00000064: ldr r0, [r0, #0]
309// 0x00000066: ldr r0, [r0, #0]
310// 0x00000068: ldr r0, [r0, #0]
311// 0x0000006a: ldr r0, [r0, #0]
312// 0x0000006c: ldr r0, [r0, #0]
313// 0x0000006e: ldr r0, [r0, #0]
314// 0x00000070: ldr r0, [r0, #0]
315// 0x00000072: ldr r0, [r0, #0]
316// 0x00000074: ldr r0, [r0, #0]
317// 0x00000076: ldr r0, [r0, #0]
318// 0x00000078: ldr r0, [r0, #0]
319// 0x0000007a: ldr r0, [r0, #0]
320// 0x0000007c: ldr r0, [r0, #0]
321// 0x0000007e: ldr r0, [r0, #0]
322// 0x00000080: ldr r0, [r0, #0]
323// 0x00000082: ldr r0, [r0, #0]
324// 0x00000084: ldr r0, [r0, #0]
325// 0x00000086: ldr r0, [r0, #0]
326// 0x00000088: ldr r0, [r0, #0]
327// 0x0000008a: ldr r0, [r0, #0]
328// 0x0000008c: ldr r0, [r0, #0]
329// 0x0000008e: ldr r0, [r0, #0]
330// 0x00000090: .cfi_remember_state
331// 0x00000090: add sp, sp, #44
332// 0x00000092: .cfi_def_cfa_offset: 20
333// 0x00000092: vpop.f32 {s16-s17}
334// 0x00000096: .cfi_def_cfa_offset: 12
335// 0x00000096: .cfi_restore_extended: r80
336// 0x00000096: .cfi_restore_extended: r81
337// 0x00000096: pop {r5, r6, pc}
338// 0x00000098: .cfi_restore_state
339// 0x00000098: .cfi_def_cfa_offset: 64
340
341static constexpr uint8_t expected_asm_kMips_adjust_head[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700342 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB1, 0xAF,
343 0x34, 0x00, 0xB0, 0xAF, 0x28, 0x00, 0xB6, 0xF7, 0x20, 0x00, 0xB4, 0xF7,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100344 0x00, 0x00, 0xA4, 0xAF, 0x08, 0x00, 0x04, 0x14, 0xFC, 0xFF, 0xBD, 0x27,
345 0x00, 0x00, 0xBF, 0xAF, 0x00, 0x00, 0x10, 0x04, 0x02, 0x00, 0x01, 0x3C,
346 0x18, 0x00, 0x21, 0x34, 0x21, 0x08, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x8F,
347 0x09, 0x00, 0x20, 0x00, 0x04, 0x00, 0xBD, 0x27,
348};
349static constexpr uint8_t expected_asm_kMips_adjust_tail[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700350 0x3C, 0x00, 0xBF, 0x8F, 0x38, 0x00, 0xB1, 0x8F, 0x34, 0x00, 0xB0, 0x8F,
351 0x28, 0x00, 0xB6, 0xD7, 0x20, 0x00, 0xB4, 0xD7, 0x40, 0x00, 0xBD, 0x27,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100352 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
353};
354static constexpr uint8_t expected_cfi_kMips_adjust[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700355 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
356 0x54, 0x0E, 0x44, 0x60, 0x0E, 0x40, 0x04, 0x04, 0x00, 0x02, 0x00, 0x0A,
357 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x4C, 0x0E, 0x00, 0x48, 0x0B, 0x0E,
358 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100359};
Alexey Frunze73296a72016-06-03 22:51:46 -0700360// 0x00000000: addiu r29, r29, -64
361// 0x00000004: .cfi_def_cfa_offset: 64
362// 0x00000004: sw r31, +60(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100363// 0x00000008: .cfi_offset: r31 at cfa-4
Alexey Frunze73296a72016-06-03 22:51:46 -0700364// 0x00000008: sw r17, +56(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100365// 0x0000000c: .cfi_offset: r17 at cfa-8
Alexey Frunze73296a72016-06-03 22:51:46 -0700366// 0x0000000c: sw r16, +52(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100367// 0x00000010: .cfi_offset: r16 at cfa-12
Alexey Frunze73296a72016-06-03 22:51:46 -0700368// 0x00000010: sdc1 f22, +40(r29)
369// 0x00000014: sdc1 f20, +32(r29)
370// 0x00000018: sw r4, +0(r29)
371// 0x0000001c: bne r0, r4, 0x00000040 ; +36
372// 0x00000020: addiu r29, r29, -4
373// 0x00000024: .cfi_def_cfa_offset: 68
374// 0x00000024: sw r31, +0(r29)
375// 0x00000028: bltzal r0, 0x0000002c ; +4
376// 0x0000002c: lui r1, 0x20000
377// 0x00000030: ori r1, r1, 24
378// 0x00000034: addu r1, r1, r31
379// 0x00000038: lw r31, +0(r29)
380// 0x0000003c: jr r1
381// 0x00000040: addiu r29, r29, 4
382// 0x00000044: .cfi_def_cfa_offset: 64
383// 0x00000044: nop
Vladimir Marko10ef6942015-10-22 15:25:54 +0100384// ...
Alexey Frunze73296a72016-06-03 22:51:46 -0700385// 0x00020044: nop
386// 0x00020048: .cfi_remember_state
387// 0x00020048: lw r31, +60(r29)
388// 0x0002004c: .cfi_restore: r31
389// 0x0002004c: lw r17, +56(r29)
390// 0x00020050: .cfi_restore: r17
391// 0x00020050: lw r16, +52(r29)
392// 0x00020054: .cfi_restore: r16
393// 0x00020054: ldc1 f22, +40(r29)
394// 0x00020058: ldc1 f20, +32(r29)
395// 0x0002005c: addiu r29, r29, 64
396// 0x00020060: .cfi_def_cfa_offset: 0
397// 0x00020060: jr r31
398// 0x00020064: nop
399// 0x00020068: .cfi_restore_state
400// 0x00020068: .cfi_def_cfa_offset: 64
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700401
402static constexpr uint8_t expected_asm_kMips64_adjust_head[] = {
403 0xD8, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBF, 0xFF, 0x18, 0x00, 0xB1, 0xFF,
404 0x10, 0x00, 0xB0, 0xFF, 0x08, 0x00, 0xB9, 0xF7, 0x00, 0x00, 0xB8, 0xF7,
405 0xE8, 0xFF, 0xBD, 0x67, 0x00, 0x00, 0xA4, 0xFF, 0x02, 0x00, 0xA6, 0x60,
406 0x02, 0x00, 0x3E, 0xEC, 0x0C, 0x00, 0x01, 0xD8,
407};
408static constexpr uint8_t expected_asm_kMips64_adjust_tail[] = {
409 0x18, 0x00, 0xBD, 0x67, 0x00, 0x00, 0xB8, 0xD7, 0x08, 0x00, 0xB9, 0xD7,
410 0x10, 0x00, 0xB0, 0xDF, 0x18, 0x00, 0xB1, 0xDF, 0x20, 0x00, 0xBF, 0xDF,
411 0x28, 0x00, 0xBD, 0x67, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
412};
413static constexpr uint8_t expected_cfi_kMips64_adjust[] = {
414 0x44, 0x0E, 0x28, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
David Srbeckyba702002016-02-01 18:15:29 +0000415 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x44, 0x0E, 0x40, 0x04, 0x14, 0x00,
416 0x02, 0x00, 0x0A, 0x44, 0x0E, 0x28, 0x44, 0xF8, 0x44, 0xF9, 0x44, 0xD0,
417 0x44, 0xD1, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700418};
419// 0x00000000: daddiu r29, r29, -40
420// 0x00000004: .cfi_def_cfa_offset: 40
421// 0x00000004: sd r31, +32(r29)
422// 0x00000008: .cfi_offset: r31 at cfa-8
423// 0x00000008: sd r17, +24(r29)
424// 0x0000000c: .cfi_offset: r17 at cfa-16
425// 0x0000000c: sd r16, +16(r29)
426// 0x00000010: .cfi_offset: r16 at cfa-24
427// 0x00000010: sdc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000428// 0x00000014: .cfi_offset: r57 at cfa-32
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700429// 0x00000014: sdc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000430// 0x00000018: .cfi_offset: r56 at cfa-40
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700431// 0x00000018: daddiu r29, r29, -24
432// 0x0000001c: .cfi_def_cfa_offset: 64
433// 0x0000001c: sd r4, +0(r29)
434// 0x00000020: bnec r5, r6, 0x0000002c ; +12
435// 0x00000024: auipc r1, 2
436// 0x00000028: jic r1, 12 ; b 0x00020030 ; +131080
437// 0x0000002c: nop
438// ...
439// 0x0002002c: nop
440// 0x00020030: .cfi_remember_state
441// 0x00020030: daddiu r29, r29, 24
442// 0x00020034: .cfi_def_cfa_offset: 40
443// 0x00020034: ldc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000444// 0x00020038: .cfi_restore: r56
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700445// 0x00020038: ldc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000446// 0x0002003c: .cfi_restore: r57
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700447// 0x0002003c: ld r16, +16(r29)
448// 0x00020040: .cfi_restore: r16
449// 0x00020040: ld r17, +24(r29)
450// 0x00020044: .cfi_restore: r17
451// 0x00020044: ld r31, +32(r29)
452// 0x00020048: .cfi_restore: r31
453// 0x00020048: daddiu r29, r29, 40
454// 0x0002004c: .cfi_def_cfa_offset: 0
455// 0x0002004c: jr r31
456// 0x00020050: nop
457// 0x00020054: .cfi_restore_state
458// 0x00020054: .cfi_def_cfa_offset: 64