blob: 6c5030c9cb6b198990bbe7599c769c127deefa35 [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,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700147 0x09, 0x00, 0xE0, 0x03, 0x40, 0x00, 0xBD, 0x27,
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,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700151 0x4C, 0x0A, 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x50, 0x0E, 0x00, 0x0B,
152 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)
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700174// 0x00000030: jr r31
175// 0x00000034: addiu r29, r29, 64
176// 0x00000038: .cfi_def_cfa_offset: 0
177// 0x00000038: .cfi_restore_state
178// 0x00000038: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100179
180static constexpr uint8_t expected_asm_kMips64[] = {
181 0xD8, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBF, 0xFF, 0x18, 0x00, 0xB1, 0xFF,
182 0x10, 0x00, 0xB0, 0xFF, 0x08, 0x00, 0xB9, 0xF7, 0x00, 0x00, 0xB8, 0xF7,
183 0xE8, 0xFF, 0xBD, 0x67, 0x00, 0x00, 0xA4, 0xFF, 0x18, 0x00, 0xBD, 0x67,
184 0x00, 0x00, 0xB8, 0xD7, 0x08, 0x00, 0xB9, 0xD7, 0x10, 0x00, 0xB0, 0xDF,
185 0x18, 0x00, 0xB1, 0xDF, 0x20, 0x00, 0xBF, 0xDF, 0x28, 0x00, 0xBD, 0x67,
186 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
187};
188static constexpr uint8_t expected_cfi_kMips64[] = {
189 0x44, 0x0E, 0x28, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
David Srbeckyba702002016-02-01 18:15:29 +0000190 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x44, 0x0E, 0x40, 0x44, 0x0A, 0x44,
191 0x0E, 0x28, 0x44, 0xF8, 0x44, 0xF9, 0x44, 0xD0, 0x44, 0xD1, 0x44, 0xDF,
192 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100193};
194// 0x00000000: daddiu r29, r29, -40
195// 0x00000004: .cfi_def_cfa_offset: 40
196// 0x00000004: sd r31, +32(r29)
197// 0x00000008: .cfi_offset: r31 at cfa-8
198// 0x00000008: sd r17, +24(r29)
199// 0x0000000c: .cfi_offset: r17 at cfa-16
200// 0x0000000c: sd r16, +16(r29)
201// 0x00000010: .cfi_offset: r16 at cfa-24
202// 0x00000010: sdc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000203// 0x00000014: .cfi_offset: r57 at cfa-32
Vladimir Marko10ef6942015-10-22 15:25:54 +0100204// 0x00000014: sdc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000205// 0x00000018: .cfi_offset: r56 at cfa-40
Vladimir Marko10ef6942015-10-22 15:25:54 +0100206// 0x00000018: daddiu r29, r29, -24
207// 0x0000001c: .cfi_def_cfa_offset: 64
208// 0x0000001c: sd r4, +0(r29)
209// 0x00000020: .cfi_remember_state
210// 0x00000020: daddiu r29, r29, 24
211// 0x00000024: .cfi_def_cfa_offset: 40
212// 0x00000024: ldc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000213// 0x00000028: .cfi_restore: r56
Vladimir Marko10ef6942015-10-22 15:25:54 +0100214// 0x00000028: ldc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000215// 0x0000002c: .cfi_restore: r57
Vladimir Marko10ef6942015-10-22 15:25:54 +0100216// 0x0000002c: ld r16, +16(r29)
217// 0x00000030: .cfi_restore: r16
218// 0x00000030: ld r17, +24(r29)
219// 0x00000034: .cfi_restore: r17
220// 0x00000034: ld r31, +32(r29)
221// 0x00000038: .cfi_restore: r31
222// 0x00000038: daddiu r29, r29, 40
223// 0x0000003c: .cfi_def_cfa_offset: 0
224// 0x0000003c: jr r31
225// 0x00000040: nop
226// 0x00000044: .cfi_restore_state
227// 0x00000044: .cfi_def_cfa_offset: 64
228
229static constexpr uint8_t expected_asm_kThumb2_adjust[] = {
230 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x90, 0x00, 0x28,
231 0x40, 0xD0, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
232 0x00, 0x68, 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 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD,
243};
244static constexpr uint8_t expected_cfi_kThumb2_adjust[] = {
245 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14,
246 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A,
247 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B,
248 0x0E, 0x40,
249};
250// 0x00000000: push {r5, r6, lr}
251// 0x00000002: .cfi_def_cfa_offset: 12
252// 0x00000002: .cfi_offset: r5 at cfa-12
253// 0x00000002: .cfi_offset: r6 at cfa-8
254// 0x00000002: .cfi_offset: r14 at cfa-4
255// 0x00000002: vpush.f32 {s16-s17}
256// 0x00000006: .cfi_def_cfa_offset: 20
257// 0x00000006: .cfi_offset_extended: r80 at cfa-20
258// 0x00000006: .cfi_offset_extended: r81 at cfa-16
259// 0x00000006: sub sp, sp, #44
260// 0x00000008: .cfi_def_cfa_offset: 64
261// 0x00000008: str r0, [sp, #0]
262// 0x0000000a: cmp r0, #0
263// 0x0000000c: beq +128 (0x00000090)
264// 0x0000000e: ldr r0, [r0, #0]
265// 0x00000010: ldr r0, [r0, #0]
266// 0x00000012: ldr r0, [r0, #0]
267// 0x00000014: ldr r0, [r0, #0]
268// 0x00000016: ldr r0, [r0, #0]
269// 0x00000018: ldr r0, [r0, #0]
270// 0x0000001a: ldr r0, [r0, #0]
271// 0x0000001c: ldr r0, [r0, #0]
272// 0x0000001e: ldr r0, [r0, #0]
273// 0x00000020: ldr r0, [r0, #0]
274// 0x00000022: ldr r0, [r0, #0]
275// 0x00000024: ldr r0, [r0, #0]
276// 0x00000026: ldr r0, [r0, #0]
277// 0x00000028: ldr r0, [r0, #0]
278// 0x0000002a: ldr r0, [r0, #0]
279// 0x0000002c: ldr r0, [r0, #0]
280// 0x0000002e: ldr r0, [r0, #0]
281// 0x00000030: ldr r0, [r0, #0]
282// 0x00000032: ldr r0, [r0, #0]
283// 0x00000034: ldr r0, [r0, #0]
284// 0x00000036: ldr r0, [r0, #0]
285// 0x00000038: ldr r0, [r0, #0]
286// 0x0000003a: ldr r0, [r0, #0]
287// 0x0000003c: ldr r0, [r0, #0]
288// 0x0000003e: ldr r0, [r0, #0]
289// 0x00000040: ldr r0, [r0, #0]
290// 0x00000042: ldr r0, [r0, #0]
291// 0x00000044: ldr r0, [r0, #0]
292// 0x00000046: ldr r0, [r0, #0]
293// 0x00000048: ldr r0, [r0, #0]
294// 0x0000004a: ldr r0, [r0, #0]
295// 0x0000004c: ldr r0, [r0, #0]
296// 0x0000004e: ldr r0, [r0, #0]
297// 0x00000050: ldr r0, [r0, #0]
298// 0x00000052: ldr r0, [r0, #0]
299// 0x00000054: ldr r0, [r0, #0]
300// 0x00000056: ldr r0, [r0, #0]
301// 0x00000058: ldr r0, [r0, #0]
302// 0x0000005a: ldr r0, [r0, #0]
303// 0x0000005c: ldr r0, [r0, #0]
304// 0x0000005e: ldr r0, [r0, #0]
305// 0x00000060: ldr r0, [r0, #0]
306// 0x00000062: ldr r0, [r0, #0]
307// 0x00000064: ldr r0, [r0, #0]
308// 0x00000066: ldr r0, [r0, #0]
309// 0x00000068: ldr r0, [r0, #0]
310// 0x0000006a: ldr r0, [r0, #0]
311// 0x0000006c: ldr r0, [r0, #0]
312// 0x0000006e: ldr r0, [r0, #0]
313// 0x00000070: ldr r0, [r0, #0]
314// 0x00000072: ldr r0, [r0, #0]
315// 0x00000074: ldr r0, [r0, #0]
316// 0x00000076: ldr r0, [r0, #0]
317// 0x00000078: ldr r0, [r0, #0]
318// 0x0000007a: ldr r0, [r0, #0]
319// 0x0000007c: ldr r0, [r0, #0]
320// 0x0000007e: ldr r0, [r0, #0]
321// 0x00000080: ldr r0, [r0, #0]
322// 0x00000082: ldr r0, [r0, #0]
323// 0x00000084: ldr r0, [r0, #0]
324// 0x00000086: ldr r0, [r0, #0]
325// 0x00000088: ldr r0, [r0, #0]
326// 0x0000008a: ldr r0, [r0, #0]
327// 0x0000008c: ldr r0, [r0, #0]
328// 0x0000008e: ldr r0, [r0, #0]
329// 0x00000090: .cfi_remember_state
330// 0x00000090: add sp, sp, #44
331// 0x00000092: .cfi_def_cfa_offset: 20
332// 0x00000092: vpop.f32 {s16-s17}
333// 0x00000096: .cfi_def_cfa_offset: 12
334// 0x00000096: .cfi_restore_extended: r80
335// 0x00000096: .cfi_restore_extended: r81
336// 0x00000096: pop {r5, r6, pc}
337// 0x00000098: .cfi_restore_state
338// 0x00000098: .cfi_def_cfa_offset: 64
339
340static constexpr uint8_t expected_asm_kMips_adjust_head[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700341 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB1, 0xAF,
342 0x34, 0x00, 0xB0, 0xAF, 0x28, 0x00, 0xB6, 0xF7, 0x20, 0x00, 0xB4, 0xF7,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100343 0x00, 0x00, 0xA4, 0xAF, 0x08, 0x00, 0x04, 0x14, 0xFC, 0xFF, 0xBD, 0x27,
344 0x00, 0x00, 0xBF, 0xAF, 0x00, 0x00, 0x10, 0x04, 0x02, 0x00, 0x01, 0x3C,
345 0x18, 0x00, 0x21, 0x34, 0x21, 0x08, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x8F,
346 0x09, 0x00, 0x20, 0x00, 0x04, 0x00, 0xBD, 0x27,
347};
348static constexpr uint8_t expected_asm_kMips_adjust_tail[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700349 0x3C, 0x00, 0xBF, 0x8F, 0x38, 0x00, 0xB1, 0x8F, 0x34, 0x00, 0xB0, 0x8F,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700350 0x28, 0x00, 0xB6, 0xD7, 0x20, 0x00, 0xB4, 0xD7, 0x09, 0x00, 0xE0, 0x03,
351 0x40, 0x00, 0xBD, 0x27,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100352};
353static constexpr uint8_t expected_cfi_kMips_adjust[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700354 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
355 0x54, 0x0E, 0x44, 0x60, 0x0E, 0x40, 0x04, 0x04, 0x00, 0x02, 0x00, 0x0A,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700356 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x50, 0x0E, 0x00, 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100357};
Alexey Frunze73296a72016-06-03 22:51:46 -0700358// 0x00000000: addiu r29, r29, -64
359// 0x00000004: .cfi_def_cfa_offset: 64
360// 0x00000004: sw r31, +60(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100361// 0x00000008: .cfi_offset: r31 at cfa-4
Alexey Frunze73296a72016-06-03 22:51:46 -0700362// 0x00000008: sw r17, +56(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100363// 0x0000000c: .cfi_offset: r17 at cfa-8
Alexey Frunze73296a72016-06-03 22:51:46 -0700364// 0x0000000c: sw r16, +52(r29)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100365// 0x00000010: .cfi_offset: r16 at cfa-12
Alexey Frunze73296a72016-06-03 22:51:46 -0700366// 0x00000010: sdc1 f22, +40(r29)
367// 0x00000014: sdc1 f20, +32(r29)
368// 0x00000018: sw r4, +0(r29)
369// 0x0000001c: bne r0, r4, 0x00000040 ; +36
370// 0x00000020: addiu r29, r29, -4
371// 0x00000024: .cfi_def_cfa_offset: 68
372// 0x00000024: sw r31, +0(r29)
373// 0x00000028: bltzal r0, 0x0000002c ; +4
374// 0x0000002c: lui r1, 0x20000
375// 0x00000030: ori r1, r1, 24
376// 0x00000034: addu r1, r1, r31
377// 0x00000038: lw r31, +0(r29)
378// 0x0000003c: jr r1
379// 0x00000040: addiu r29, r29, 4
380// 0x00000044: .cfi_def_cfa_offset: 64
381// 0x00000044: nop
Vladimir Marko10ef6942015-10-22 15:25:54 +0100382// ...
Alexey Frunze73296a72016-06-03 22:51:46 -0700383// 0x00020044: nop
384// 0x00020048: .cfi_remember_state
385// 0x00020048: lw r31, +60(r29)
386// 0x0002004c: .cfi_restore: r31
387// 0x0002004c: lw r17, +56(r29)
388// 0x00020050: .cfi_restore: r17
389// 0x00020050: lw r16, +52(r29)
390// 0x00020054: .cfi_restore: r16
391// 0x00020054: ldc1 f22, +40(r29)
392// 0x00020058: ldc1 f20, +32(r29)
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700393// 0x0002005c: jr r31
394// 0x00020060: addiu r29, r29, 64
395// 0x00020064: .cfi_def_cfa_offset: 0
396// 0x00020064: .cfi_restore_state
397// 0x00020064: .cfi_def_cfa_offset: 64
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700398
399static constexpr uint8_t expected_asm_kMips64_adjust_head[] = {
400 0xD8, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBF, 0xFF, 0x18, 0x00, 0xB1, 0xFF,
401 0x10, 0x00, 0xB0, 0xFF, 0x08, 0x00, 0xB9, 0xF7, 0x00, 0x00, 0xB8, 0xF7,
402 0xE8, 0xFF, 0xBD, 0x67, 0x00, 0x00, 0xA4, 0xFF, 0x02, 0x00, 0xA6, 0x60,
403 0x02, 0x00, 0x3E, 0xEC, 0x0C, 0x00, 0x01, 0xD8,
404};
405static constexpr uint8_t expected_asm_kMips64_adjust_tail[] = {
406 0x18, 0x00, 0xBD, 0x67, 0x00, 0x00, 0xB8, 0xD7, 0x08, 0x00, 0xB9, 0xD7,
407 0x10, 0x00, 0xB0, 0xDF, 0x18, 0x00, 0xB1, 0xDF, 0x20, 0x00, 0xBF, 0xDF,
408 0x28, 0x00, 0xBD, 0x67, 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
409};
410static constexpr uint8_t expected_cfi_kMips64_adjust[] = {
411 0x44, 0x0E, 0x28, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
David Srbeckyba702002016-02-01 18:15:29 +0000412 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x44, 0x0E, 0x40, 0x04, 0x14, 0x00,
413 0x02, 0x00, 0x0A, 0x44, 0x0E, 0x28, 0x44, 0xF8, 0x44, 0xF9, 0x44, 0xD0,
414 0x44, 0xD1, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48, 0x0B, 0x0E, 0x40,
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700415};
416// 0x00000000: daddiu r29, r29, -40
417// 0x00000004: .cfi_def_cfa_offset: 40
418// 0x00000004: sd r31, +32(r29)
419// 0x00000008: .cfi_offset: r31 at cfa-8
420// 0x00000008: sd r17, +24(r29)
421// 0x0000000c: .cfi_offset: r17 at cfa-16
422// 0x0000000c: sd r16, +16(r29)
423// 0x00000010: .cfi_offset: r16 at cfa-24
424// 0x00000010: sdc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000425// 0x00000014: .cfi_offset: r57 at cfa-32
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700426// 0x00000014: sdc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000427// 0x00000018: .cfi_offset: r56 at cfa-40
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700428// 0x00000018: daddiu r29, r29, -24
429// 0x0000001c: .cfi_def_cfa_offset: 64
430// 0x0000001c: sd r4, +0(r29)
431// 0x00000020: bnec r5, r6, 0x0000002c ; +12
432// 0x00000024: auipc r1, 2
433// 0x00000028: jic r1, 12 ; b 0x00020030 ; +131080
434// 0x0000002c: nop
435// ...
436// 0x0002002c: nop
437// 0x00020030: .cfi_remember_state
438// 0x00020030: daddiu r29, r29, 24
439// 0x00020034: .cfi_def_cfa_offset: 40
440// 0x00020034: ldc1 f24, +0(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000441// 0x00020038: .cfi_restore: r56
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700442// 0x00020038: ldc1 f25, +8(r29)
David Srbeckyba702002016-02-01 18:15:29 +0000443// 0x0002003c: .cfi_restore: r57
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700444// 0x0002003c: ld r16, +16(r29)
445// 0x00020040: .cfi_restore: r16
446// 0x00020040: ld r17, +24(r29)
447// 0x00020044: .cfi_restore: r17
448// 0x00020044: ld r31, +32(r29)
449// 0x00020048: .cfi_restore: r31
450// 0x00020048: daddiu r29, r29, 40
451// 0x0002004c: .cfi_def_cfa_offset: 0
452// 0x0002004c: jr r31
453// 0x00020050: nop
454// 0x00020054: .cfi_restore_state
455// 0x00020054: .cfi_def_cfa_offset: 64