blob: a205800dfabe315f261ca635b9500777fad6acfa [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,
Vladimir Marko3a656e12016-08-02 14:57:56 +01003 0x21, 0x91, 0x8D, 0xED, 0x22, 0x0A, 0x23, 0x92, 0x24, 0x93, 0x88, 0xB0,
4 0x08, 0xB0, 0x09, 0xB0, 0xBD, 0xEC, 0x10, 0x8A, 0xBD, 0xE8, 0xE0, 0x8D,
David Srbeckydd973932015-04-07 20:29:48 +01005};
6static constexpr uint8_t expected_cfi_kThumb2[] = {
7 0x44, 0x0E, 0x1C, 0x85, 0x07, 0x86, 0x06, 0x87, 0x05, 0x88, 0x04, 0x8A,
8 0x03, 0x8B, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x5C, 0x05, 0x50, 0x17, 0x05,
9 0x51, 0x16, 0x05, 0x52, 0x15, 0x05, 0x53, 0x14, 0x05, 0x54, 0x13, 0x05,
10 0x55, 0x12, 0x05, 0x56, 0x11, 0x05, 0x57, 0x10, 0x05, 0x58, 0x0F, 0x05,
11 0x59, 0x0E, 0x05, 0x5A, 0x0D, 0x05, 0x5B, 0x0C, 0x05, 0x5C, 0x0B, 0x05,
12 0x5D, 0x0A, 0x05, 0x5E, 0x09, 0x05, 0x5F, 0x08, 0x42, 0x0E, 0x80, 0x01,
Vladimir Marko3a656e12016-08-02 14:57:56 +010013 0x4E, 0x0E, 0xA0, 0x01, 0x42, 0x0E, 0x80, 0x01, 0x0A, 0x42, 0x0E, 0x5C,
David Srbeckydd973932015-04-07 20:29:48 +010014 0x44, 0x0E, 0x1C, 0x06, 0x50, 0x06, 0x51, 0x06, 0x52, 0x06, 0x53, 0x06,
15 0x54, 0x06, 0x55, 0x06, 0x56, 0x06, 0x57, 0x06, 0x58, 0x06, 0x59, 0x06,
16 0x5A, 0x06, 0x5B, 0x06, 0x5C, 0x06, 0x5D, 0x06, 0x5E, 0x06, 0x5F, 0x44,
17 0x0B, 0x0E, 0x80, 0x01,
18};
19// 0x00000000: push {r5, r6, r7, r8, r10, r11, lr}
20// 0x00000004: .cfi_def_cfa_offset: 28
21// 0x00000004: .cfi_offset: r5 at cfa-28
22// 0x00000004: .cfi_offset: r6 at cfa-24
23// 0x00000004: .cfi_offset: r7 at cfa-20
24// 0x00000004: .cfi_offset: r8 at cfa-16
25// 0x00000004: .cfi_offset: r10 at cfa-12
26// 0x00000004: .cfi_offset: r11 at cfa-8
27// 0x00000004: .cfi_offset: r14 at cfa-4
28// 0x00000004: vpush.f32 {s16-s31}
29// 0x00000008: .cfi_def_cfa_offset: 92
30// 0x00000008: .cfi_offset_extended: r80 at cfa-92
31// 0x00000008: .cfi_offset_extended: r81 at cfa-88
32// 0x00000008: .cfi_offset_extended: r82 at cfa-84
33// 0x00000008: .cfi_offset_extended: r83 at cfa-80
34// 0x00000008: .cfi_offset_extended: r84 at cfa-76
35// 0x00000008: .cfi_offset_extended: r85 at cfa-72
36// 0x00000008: .cfi_offset_extended: r86 at cfa-68
37// 0x00000008: .cfi_offset_extended: r87 at cfa-64
38// 0x00000008: .cfi_offset_extended: r88 at cfa-60
39// 0x00000008: .cfi_offset_extended: r89 at cfa-56
40// 0x00000008: .cfi_offset_extended: r90 at cfa-52
41// 0x00000008: .cfi_offset_extended: r91 at cfa-48
42// 0x00000008: .cfi_offset_extended: r92 at cfa-44
43// 0x00000008: .cfi_offset_extended: r93 at cfa-40
44// 0x00000008: .cfi_offset_extended: r94 at cfa-36
45// 0x00000008: .cfi_offset_extended: r95 at cfa-32
46// 0x00000008: sub sp, sp, #36
47// 0x0000000a: .cfi_def_cfa_offset: 128
48// 0x0000000a: str r0, [sp, #0]
Vladimir Marko3a656e12016-08-02 14:57:56 +010049// 0x0000000c: str r1, [sp, #132]
50// 0x0000000e: vstr.f32 s0, [sp, #136]
51// 0x00000012: str r2, [sp, #140]
52// 0x00000014: str r3, [sp, #144]
53// 0x00000016: sub sp, sp, #32
54// 0x00000018: .cfi_def_cfa_offset: 160
55// 0x00000018: add sp, sp, #32
56// 0x0000001a: .cfi_def_cfa_offset: 128
57// 0x0000001a: .cfi_remember_state
58// 0x0000001a: add sp, sp, #36
59// 0x0000001c: .cfi_def_cfa_offset: 92
60// 0x0000001c: vpop.f32 {s16-s31}
61// 0x00000020: .cfi_def_cfa_offset: 28
62// 0x00000020: .cfi_restore_extended: r80
63// 0x00000020: .cfi_restore_extended: r81
64// 0x00000020: .cfi_restore_extended: r82
65// 0x00000020: .cfi_restore_extended: r83
66// 0x00000020: .cfi_restore_extended: r84
67// 0x00000020: .cfi_restore_extended: r85
68// 0x00000020: .cfi_restore_extended: r86
69// 0x00000020: .cfi_restore_extended: r87
70// 0x00000020: .cfi_restore_extended: r88
71// 0x00000020: .cfi_restore_extended: r89
72// 0x00000020: .cfi_restore_extended: r90
73// 0x00000020: .cfi_restore_extended: r91
74// 0x00000020: .cfi_restore_extended: r92
75// 0x00000020: .cfi_restore_extended: r93
76// 0x00000020: .cfi_restore_extended: r94
77// 0x00000020: .cfi_restore_extended: r95
78// 0x00000020: pop {r5, r6, r7, r8, r10, r11, pc}
79// 0x00000024: .cfi_restore_state
80// 0x00000024: .cfi_def_cfa_offset: 128
David Srbeckydd973932015-04-07 20:29:48 +010081
82static constexpr uint8_t expected_asm_kArm64[] = {
Zheng Xu69a50302015-04-14 20:04:41 +080083 0xFF, 0x03, 0x03, 0xD1, 0xF3, 0x53, 0x06, 0xA9, 0xF5, 0x5B, 0x07, 0xA9,
84 0xF7, 0x63, 0x08, 0xA9, 0xF9, 0x6B, 0x09, 0xA9, 0xFB, 0x73, 0x0A, 0xA9,
85 0xFD, 0x7B, 0x0B, 0xA9, 0xE8, 0x27, 0x02, 0x6D, 0xEA, 0x2F, 0x03, 0x6D,
Mathieu Chartiere401d142015-04-22 13:56:20 -070086 0xEC, 0x37, 0x04, 0x6D, 0xEE, 0x3F, 0x05, 0x6D, 0xE0, 0x03, 0x00, 0xF9,
87 0xE1, 0xCB, 0x00, 0xB9, 0xE0, 0xCF, 0x00, 0xBD, 0xE2, 0xD3, 0x00, 0xB9,
88 0xE3, 0xD7, 0x00, 0xB9, 0xFF, 0x83, 0x00, 0xD1, 0xFF, 0x83, 0x00, 0x91,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010089 0xF3, 0x53, 0x46, 0xA9, 0xF5, 0x5B, 0x47, 0xA9, 0xF7, 0x63, 0x48, 0xA9,
90 0xF9, 0x6B, 0x49, 0xA9, 0xFB, 0x73, 0x4A, 0xA9, 0xFD, 0x7B, 0x4B, 0xA9,
91 0xE8, 0x27, 0x42, 0x6D, 0xEA, 0x2F, 0x43, 0x6D, 0xEC, 0x37, 0x44, 0x6D,
92 0xEE, 0x3F, 0x45, 0x6D, 0xFF, 0x03, 0x03, 0x91, 0xC0, 0x03, 0x5F, 0xD6,
David Srbeckydd973932015-04-07 20:29:48 +010093};
94static constexpr uint8_t expected_cfi_kArm64[] = {
Zheng Xu69a50302015-04-14 20:04:41 +080095 0x44, 0x0E, 0xC0, 0x01, 0x44, 0x93, 0x18, 0x94, 0x16, 0x44, 0x95, 0x14,
96 0x96, 0x12, 0x44, 0x97, 0x10, 0x98, 0x0E, 0x44, 0x99, 0x0C, 0x9A, 0x0A,
97 0x44, 0x9B, 0x08, 0x9C, 0x06, 0x44, 0x9D, 0x04, 0x9E, 0x02, 0x44, 0x05,
98 0x48, 0x28, 0x05, 0x49, 0x26, 0x44, 0x05, 0x4A, 0x24, 0x05, 0x4B, 0x22,
99 0x44, 0x05, 0x4C, 0x20, 0x05, 0x4D, 0x1E, 0x44, 0x05, 0x4E, 0x1C, 0x05,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100100 0x4F, 0x1A, 0x58, 0x0E, 0xE0, 0x01, 0x44, 0x0E, 0xC0, 0x01, 0x0A, 0x44,
101 0xD3, 0xD4, 0x44, 0xD5, 0xD6, 0x44, 0xD7, 0xD8, 0x44, 0xD9, 0xDA, 0x44,
102 0xDB, 0xDC, 0x44, 0xDD, 0xDE, 0x44, 0x06, 0x48, 0x06, 0x49, 0x44, 0x06,
103 0x4A, 0x06, 0x4B, 0x44, 0x06, 0x4C, 0x06, 0x4D, 0x44, 0x06, 0x4E, 0x06,
104 0x4F, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0xC0, 0x01,
David Srbeckydd973932015-04-07 20:29:48 +0100105};
106// 0x00000000: sub sp, sp, #0xc0 (192)
107// 0x00000004: .cfi_def_cfa_offset: 192
Mathieu Chartiere401d142015-04-22 13:56:20 -0700108// 0x00000004: stp tr, x20, [sp, #96]
Zheng Xu69a50302015-04-14 20:04:41 +0800109// 0x00000008: .cfi_offset: r19 at cfa-96
110// 0x00000008: .cfi_offset: r20 at cfa-88
111// 0x00000008: stp x21, x22, [sp, #112]
112// 0x0000000c: .cfi_offset: r21 at cfa-80
113// 0x0000000c: .cfi_offset: r22 at cfa-72
114// 0x0000000c: stp x23, x24, [sp, #128]
115// 0x00000010: .cfi_offset: r23 at cfa-64
116// 0x00000010: .cfi_offset: r24 at cfa-56
117// 0x00000010: stp x25, x26, [sp, #144]
118// 0x00000014: .cfi_offset: r25 at cfa-48
119// 0x00000014: .cfi_offset: r26 at cfa-40
120// 0x00000014: stp x27, x28, [sp, #160]
121// 0x00000018: .cfi_offset: r27 at cfa-32
122// 0x00000018: .cfi_offset: r28 at cfa-24
123// 0x00000018: stp x29, lr, [sp, #176]
124// 0x0000001c: .cfi_offset: r29 at cfa-16
125// 0x0000001c: .cfi_offset: r30 at cfa-8
126// 0x0000001c: stp d8, d9, [sp, #32]
127// 0x00000020: .cfi_offset_extended: r72 at cfa-160
128// 0x00000020: .cfi_offset_extended: r73 at cfa-152
129// 0x00000020: stp d10, d11, [sp, #48]
130// 0x00000024: .cfi_offset_extended: r74 at cfa-144
131// 0x00000024: .cfi_offset_extended: r75 at cfa-136
132// 0x00000024: stp d12, d13, [sp, #64]
133// 0x00000028: .cfi_offset_extended: r76 at cfa-128
134// 0x00000028: .cfi_offset_extended: r77 at cfa-120
135// 0x00000028: stp d14, d15, [sp, #80]
136// 0x0000002c: .cfi_offset_extended: r78 at cfa-112
137// 0x0000002c: .cfi_offset_extended: r79 at cfa-104
Mathieu Chartiere401d142015-04-22 13:56:20 -0700138// 0x0000002c: str x0, [sp]
139// 0x00000030: str w1, [sp, #200]
140// 0x00000034: str s0, [sp, #204]
141// 0x00000038: str w2, [sp, #208]
142// 0x0000003c: str w3, [sp, #212]
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100143// 0x00000040: sub sp, sp, #0x20 (32)
144// 0x00000044: .cfi_def_cfa_offset: 224
145// 0x00000044: add sp, sp, #0x20 (32)
146// 0x00000048: .cfi_def_cfa_offset: 192
147// 0x00000048: .cfi_remember_state
Mathieu Chartiere401d142015-04-22 13:56:20 -0700148// 0x00000048: ldp tr, x20, [sp, #96]
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100149// 0x0000004c: .cfi_restore: r19
150// 0x0000004c: .cfi_restore: r20
151// 0x0000004c: ldp x21, x22, [sp, #112]
152// 0x00000050: .cfi_restore: r21
153// 0x00000050: .cfi_restore: r22
154// 0x00000050: ldp x23, x24, [sp, #128]
155// 0x00000054: .cfi_restore: r23
156// 0x00000054: .cfi_restore: r24
157// 0x00000054: ldp x25, x26, [sp, #144]
158// 0x00000058: .cfi_restore: r25
159// 0x00000058: .cfi_restore: r26
160// 0x00000058: ldp x27, x28, [sp, #160]
161// 0x0000005c: .cfi_restore: r27
162// 0x0000005c: .cfi_restore: r28
163// 0x0000005c: ldp x29, lr, [sp, #176]
164// 0x00000060: .cfi_restore: r29
165// 0x00000060: .cfi_restore: r30
166// 0x00000060: ldp d8, d9, [sp, #32]
167// 0x00000064: .cfi_restore_extended: r72
168// 0x00000064: .cfi_restore_extended: r73
169// 0x00000064: ldp d10, d11, [sp, #48]
170// 0x00000068: .cfi_restore_extended: r74
171// 0x00000068: .cfi_restore_extended: r75
172// 0x00000068: ldp d12, d13, [sp, #64]
173// 0x0000006c: .cfi_restore_extended: r76
174// 0x0000006c: .cfi_restore_extended: r77
175// 0x0000006c: ldp d14, d15, [sp, #80]
176// 0x00000070: .cfi_restore_extended: r78
177// 0x00000070: .cfi_restore_extended: r79
178// 0x00000070: add sp, sp, #0xc0 (192)
179// 0x00000074: .cfi_def_cfa_offset: 0
180// 0x00000074: ret
181// 0x00000078: .cfi_restore_state
182// 0x00000078: .cfi_def_cfa_offset: 192
David Srbeckydd973932015-04-07 20:29:48 +0100183
184static constexpr uint8_t expected_asm_kX86[] = {
185 0x57, 0x56, 0x55, 0x83, 0xC4, 0xE4, 0x50, 0x89, 0x4C, 0x24, 0x34, 0xF3,
186 0x0F, 0x11, 0x44, 0x24, 0x38, 0x89, 0x54, 0x24, 0x3C, 0x89, 0x5C, 0x24,
187 0x40, 0x83, 0xC4, 0xE0, 0x83, 0xC4, 0x20, 0x83, 0xC4, 0x20, 0x5D, 0x5E,
188 0x5F, 0xC3,
189};
190static constexpr uint8_t expected_cfi_kX86[] = {
191 0x41, 0x0E, 0x08, 0x87, 0x02, 0x41, 0x0E, 0x0C, 0x86, 0x03, 0x41, 0x0E,
192 0x10, 0x85, 0x04, 0x43, 0x0E, 0x2C, 0x41, 0x0E, 0x30, 0x55, 0x0E, 0x50,
193 0x43, 0x0E, 0x30, 0x0A, 0x43, 0x0E, 0x10, 0x41, 0x0E, 0x0C, 0xC5, 0x41,
194 0x0E, 0x08, 0xC6, 0x41, 0x0E, 0x04, 0xC7, 0x41, 0x0B, 0x0E, 0x30,
195};
196// 0x00000000: push edi
197// 0x00000001: .cfi_def_cfa_offset: 8
198// 0x00000001: .cfi_offset: r7 at cfa-8
199// 0x00000001: push esi
200// 0x00000002: .cfi_def_cfa_offset: 12
201// 0x00000002: .cfi_offset: r6 at cfa-12
202// 0x00000002: push ebp
203// 0x00000003: .cfi_def_cfa_offset: 16
204// 0x00000003: .cfi_offset: r5 at cfa-16
205// 0x00000003: add esp, -28
206// 0x00000006: .cfi_def_cfa_offset: 44
207// 0x00000006: push eax
208// 0x00000007: .cfi_def_cfa_offset: 48
209// 0x00000007: mov [esp + 52], ecx
210// 0x0000000b: movss [esp + 56], xmm0
211// 0x00000011: mov [esp + 60], edx
212// 0x00000015: mov [esp + 64], ebx
213// 0x00000019: add esp, -32
214// 0x0000001c: .cfi_def_cfa_offset: 80
215// 0x0000001c: add esp, 32
216// 0x0000001f: .cfi_def_cfa_offset: 48
217// 0x0000001f: .cfi_remember_state
218// 0x0000001f: add esp, 32
219// 0x00000022: .cfi_def_cfa_offset: 16
220// 0x00000022: pop ebp
221// 0x00000023: .cfi_def_cfa_offset: 12
222// 0x00000023: .cfi_restore: r5
223// 0x00000023: pop esi
224// 0x00000024: .cfi_def_cfa_offset: 8
225// 0x00000024: .cfi_restore: r6
226// 0x00000024: pop edi
227// 0x00000025: .cfi_def_cfa_offset: 4
228// 0x00000025: .cfi_restore: r7
229// 0x00000025: ret
230// 0x00000026: .cfi_restore_state
231// 0x00000026: .cfi_def_cfa_offset: 48
232
233static constexpr uint8_t expected_asm_kX86_64[] = {
234 0x41, 0x57, 0x41, 0x56, 0x41, 0x55, 0x41, 0x54, 0x55, 0x53, 0x48, 0x83,
235 0xEC, 0x48, 0xF2, 0x44, 0x0F, 0x11, 0x7C, 0x24, 0x40, 0xF2, 0x44, 0x0F,
236 0x11, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24, 0x30, 0xF2,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700237 0x44, 0x0F, 0x11, 0x64, 0x24, 0x28, 0x48, 0x89, 0x3C, 0x24, 0x89, 0xB4,
238 0x24, 0x88, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x11, 0x84, 0x24, 0x8C, 0x00,
239 0x00, 0x00, 0x89, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x89, 0x8C, 0x24,
240 0x94, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0xE0, 0x48, 0x83, 0xC4, 0x20,
241 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x28, 0xF2, 0x44, 0x0F, 0x10, 0x6C,
242 0x24, 0x30, 0xF2, 0x44, 0x0F, 0x10, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F,
243 0x10, 0x7C, 0x24, 0x40, 0x48, 0x83, 0xC4, 0x48, 0x5B, 0x5D, 0x41, 0x5C,
244 0x41, 0x5D, 0x41, 0x5E, 0x41, 0x5F, 0xC3,
David Srbeckydd973932015-04-07 20:29:48 +0100245};
246static constexpr uint8_t expected_cfi_kX86_64[] = {
247 0x42, 0x0E, 0x10, 0x8F, 0x04, 0x42, 0x0E, 0x18, 0x8E, 0x06, 0x42, 0x0E,
248 0x20, 0x8D, 0x08, 0x42, 0x0E, 0x28, 0x8C, 0x0A, 0x41, 0x0E, 0x30, 0x86,
249 0x0C, 0x41, 0x0E, 0x38, 0x83, 0x0E, 0x44, 0x0E, 0x80, 0x01, 0x47, 0xA0,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700250 0x10, 0x47, 0x9F, 0x12, 0x47, 0x9E, 0x14, 0x47, 0x9D, 0x16, 0x66, 0x0E,
David Srbeckydd973932015-04-07 20:29:48 +0100251 0xA0, 0x01, 0x44, 0x0E, 0x80, 0x01, 0x0A, 0x47, 0xDD, 0x47, 0xDE, 0x47,
252 0xDF, 0x47, 0xE0, 0x44, 0x0E, 0x38, 0x41, 0x0E, 0x30, 0xC3, 0x41, 0x0E,
253 0x28, 0xC6, 0x42, 0x0E, 0x20, 0xCC, 0x42, 0x0E, 0x18, 0xCD, 0x42, 0x0E,
254 0x10, 0xCE, 0x42, 0x0E, 0x08, 0xCF, 0x41, 0x0B, 0x0E, 0x80, 0x01,
255};
256// 0x00000000: push r15
257// 0x00000002: .cfi_def_cfa_offset: 16
258// 0x00000002: .cfi_offset: r15 at cfa-16
259// 0x00000002: push r14
260// 0x00000004: .cfi_def_cfa_offset: 24
261// 0x00000004: .cfi_offset: r14 at cfa-24
262// 0x00000004: push r13
263// 0x00000006: .cfi_def_cfa_offset: 32
264// 0x00000006: .cfi_offset: r13 at cfa-32
265// 0x00000006: push r12
266// 0x00000008: .cfi_def_cfa_offset: 40
267// 0x00000008: .cfi_offset: r12 at cfa-40
268// 0x00000008: push rbp
269// 0x00000009: .cfi_def_cfa_offset: 48
270// 0x00000009: .cfi_offset: r6 at cfa-48
271// 0x00000009: push rbx
272// 0x0000000a: .cfi_def_cfa_offset: 56
273// 0x0000000a: .cfi_offset: r3 at cfa-56
274// 0x0000000a: subq rsp, 72
275// 0x0000000e: .cfi_def_cfa_offset: 128
276// 0x0000000e: movsd [rsp + 64], xmm15
277// 0x00000015: .cfi_offset: r32 at cfa-64
278// 0x00000015: movsd [rsp + 56], xmm14
279// 0x0000001c: .cfi_offset: r31 at cfa-72
280// 0x0000001c: movsd [rsp + 48], xmm13
281// 0x00000023: .cfi_offset: r30 at cfa-80
282// 0x00000023: movsd [rsp + 40], xmm12
283// 0x0000002a: .cfi_offset: r29 at cfa-88
Mathieu Chartiere401d142015-04-22 13:56:20 -0700284// 0x0000002a: movq [rsp], rdi
285// 0x0000002e: mov [rsp + 136], esi
286// 0x00000035: movss [rsp + 140], xmm0
287// 0x0000003e: mov [rsp + 144], edx
288// 0x00000045: mov [rsp + 148], ecx
289// 0x0000004c: addq rsp, -32
290// 0x00000050: .cfi_def_cfa_offset: 160
291// 0x00000050: addq rsp, 32
292// 0x00000054: .cfi_def_cfa_offset: 128
293// 0x00000054: .cfi_remember_state
294// 0x00000054: movsd xmm12, [rsp + 40]
295// 0x0000005b: .cfi_restore: r29
296// 0x0000005b: movsd xmm13, [rsp + 48]
297// 0x00000062: .cfi_restore: r30
298// 0x00000062: movsd xmm14, [rsp + 56]
299// 0x00000069: .cfi_restore: r31
300// 0x00000069: movsd xmm15, [rsp + 64]
301// 0x00000070: .cfi_restore: r32
302// 0x00000070: addq rsp, 72
303// 0x00000074: .cfi_def_cfa_offset: 56
304// 0x00000074: pop rbx
305// 0x00000075: .cfi_def_cfa_offset: 48
306// 0x00000075: .cfi_restore: r3
307// 0x00000075: pop rbp
308// 0x00000076: .cfi_def_cfa_offset: 40
309// 0x00000076: .cfi_restore: r6
310// 0x00000076: pop r12
311// 0x00000078: .cfi_def_cfa_offset: 32
312// 0x00000078: .cfi_restore: r12
313// 0x00000078: pop r13
314// 0x0000007a: .cfi_def_cfa_offset: 24
315// 0x0000007a: .cfi_restore: r13
316// 0x0000007a: pop r14
317// 0x0000007c: .cfi_def_cfa_offset: 16
318// 0x0000007c: .cfi_restore: r14
319// 0x0000007c: pop r15
320// 0x0000007e: .cfi_def_cfa_offset: 8
321// 0x0000007e: .cfi_restore: r15
322// 0x0000007e: ret
323// 0x0000007f: .cfi_restore_state
324// 0x0000007f: .cfi_def_cfa_offset: 128
David Srbeckydd973932015-04-07 20:29:48 +0100325
326static constexpr uint8_t expected_asm_kMips[] = {
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200327 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xBE, 0xAF,
328 0x34, 0x00, 0xB7, 0xAF, 0x30, 0x00, 0xB6, 0xAF, 0x2C, 0x00, 0xB5, 0xAF,
329 0x28, 0x00, 0xB4, 0xAF, 0x24, 0x00, 0xB3, 0xAF, 0x20, 0x00, 0xB2, 0xAF,
330 0x00, 0x00, 0xA4, 0xAF, 0x44, 0x00, 0xA5, 0xAF, 0x48, 0x00, 0xAC, 0xE7,
331 0x4C, 0x00, 0xA6, 0xAF, 0x50, 0x00, 0xA7, 0xAF, 0xE0, 0xFF, 0xBD, 0x27,
332 0x20, 0x00, 0xBD, 0x27, 0x20, 0x00, 0xB2, 0x8F, 0x24, 0x00, 0xB3, 0x8F,
333 0x28, 0x00, 0xB4, 0x8F, 0x2C, 0x00, 0xB5, 0x8F, 0x30, 0x00, 0xB6, 0x8F,
334 0x34, 0x00, 0xB7, 0x8F, 0x38, 0x00, 0xBE, 0x8F, 0x3C, 0x00, 0xBF, 0x8F,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700335 0x09, 0x00, 0xE0, 0x03, 0x40, 0x00, 0xBD, 0x27,
David Srbeckydd973932015-04-07 20:29:48 +0100336};
337static constexpr uint8_t expected_cfi_kMips[] = {
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200338 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x9E, 0x02, 0x44, 0x97, 0x03,
339 0x44, 0x96, 0x04, 0x44, 0x95, 0x05, 0x44, 0x94, 0x06, 0x44, 0x93, 0x07,
340 0x44, 0x92, 0x08, 0x58, 0x0E, 0x60, 0x44, 0x0E, 0x40, 0x0A, 0x44, 0xD2,
341 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6, 0x44, 0xD7, 0x44, 0xDE,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700342 0x44, 0xDF, 0x48, 0x0E, 0x00, 0x0B, 0x0E, 0x40,
David Srbeckydd973932015-04-07 20:29:48 +0100343};
344// 0x00000000: addiu r29, r29, -64
345// 0x00000004: .cfi_def_cfa_offset: 64
346// 0x00000004: sw r31, +60(r29)
347// 0x00000008: .cfi_offset: r31 at cfa-4
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200348// 0x00000008: sw r30, +56(r29)
349// 0x0000000c: .cfi_offset: r30 at cfa-8
350// 0x0000000c: sw r23, +52(r29)
351// 0x00000010: .cfi_offset: r23 at cfa-12
352// 0x00000010: sw r22, +48(r29)
353// 0x00000014: .cfi_offset: r22 at cfa-16
354// 0x00000014: sw r21, +44(r29)
355// 0x00000018: .cfi_offset: r21 at cfa-20
356// 0x00000018: sw r20, +40(r29)
357// 0x0000001c: .cfi_offset: r20 at cfa-24
358// 0x0000001c: sw r19, +36(r29)
359// 0x00000020: .cfi_offset: r19 at cfa-28
360// 0x00000020: sw r18, +32(r29)
361// 0x00000024: .cfi_offset: r18 at cfa-32
362// 0x00000024: sw r4, +0(r29)
363// 0x00000028: sw r5, +68(r29)
364// 0x0000002c: swc1 f12, +72(r29)
365// 0x00000030: sw r6, +76(r29)
366// 0x00000034: sw r7, +80(r29)
367// 0x00000038: addiu r29, r29, -32
368// 0x0000003c: .cfi_def_cfa_offset: 96
369// 0x0000003c: addiu r29, r29, 32
370// 0x00000040: .cfi_def_cfa_offset: 64
371// 0x00000040: .cfi_remember_state
372// 0x00000040: lw r18, +32(r29)
373// 0x00000044: .cfi_restore: r18
374// 0x00000044: lw r19, +36(r29)
375// 0x00000048: .cfi_restore: r19
376// 0x00000048: lw r20, +40(r29)
377// 0x0000004c: .cfi_restore: r20
378// 0x0000004c: lw r21, +44(r29)
379// 0x00000050: .cfi_restore: r21
380// 0x00000050: lw r22, +48(r29)
381// 0x00000054: .cfi_restore: r22
382// 0x00000054: lw r23, +52(r29)
383// 0x00000058: .cfi_restore: r23
384// 0x00000058: lw r30, +56(r29)
385// 0x0000005c: .cfi_restore: r30
386// 0x0000005c: lw r31, +60(r29)
387// 0x00000060: .cfi_restore: r31
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700388// 0x00000060: jr r31
389// 0x00000064: addiu r29, r29, 64
390// 0x00000068: .cfi_def_cfa_offset: 0
391// 0x00000068: .cfi_restore_state
392// 0x00000068: .cfi_def_cfa_offset: 64
David Srbeckydd973932015-04-07 20:29:48 +0100393
394static constexpr uint8_t expected_asm_kMips64[] = {
Mathieu Chartier97a21812015-10-16 09:29:31 -0700395 0x90, 0xFF, 0xBD, 0x67, 0x68, 0x00, 0xBF, 0xFF, 0x60, 0x00, 0xBE, 0xFF,
396 0x58, 0x00, 0xBC, 0xFF, 0x50, 0x00, 0xB7, 0xFF, 0x48, 0x00, 0xB6, 0xFF,
397 0x40, 0x00, 0xB5, 0xFF, 0x38, 0x00, 0xB4, 0xFF, 0x30, 0x00, 0xB3, 0xFF,
398 0x28, 0x00, 0xB2, 0xFF, 0x00, 0x00, 0xA4, 0xFF, 0x78, 0x00, 0xA5, 0xAF,
399 0x7C, 0x00, 0xAE, 0xE7, 0x80, 0x00, 0xA7, 0xAF, 0x84, 0x00, 0xA8, 0xAF,
400 0xE0, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBD, 0x67, 0x28, 0x00, 0xB2, 0xDF,
401 0x30, 0x00, 0xB3, 0xDF, 0x38, 0x00, 0xB4, 0xDF, 0x40, 0x00, 0xB5, 0xDF,
402 0x48, 0x00, 0xB6, 0xDF, 0x50, 0x00, 0xB7, 0xDF, 0x58, 0x00, 0xBC, 0xDF,
403 0x60, 0x00, 0xBE, 0xDF, 0x68, 0x00, 0xBF, 0xDF, 0x70, 0x00, 0xBD, 0x67,
David Srbeckydd973932015-04-07 20:29:48 +0100404 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
405};
406static constexpr uint8_t expected_cfi_kMips64[] = {
Mathieu Chartier97a21812015-10-16 09:29:31 -0700407 0x44, 0x0E, 0x70, 0x44, 0x9F, 0x02, 0x44, 0x9E, 0x04, 0x44, 0x9C, 0x06,
David Srbeckydd973932015-04-07 20:29:48 +0100408 0x44, 0x97, 0x08, 0x44, 0x96, 0x0A, 0x44, 0x95, 0x0C, 0x44, 0x94, 0x0E,
Mathieu Chartier97a21812015-10-16 09:29:31 -0700409 0x44, 0x93, 0x10, 0x44, 0x92, 0x12, 0x58, 0x0E, 0x90, 0x01, 0x44, 0x0E,
410 0x70, 0x0A, 0x44, 0xD2, 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6,
David Srbeckydd973932015-04-07 20:29:48 +0100411 0x44, 0xD7, 0x44, 0xDC, 0x44, 0xDE, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48,
Mathieu Chartier97a21812015-10-16 09:29:31 -0700412 0x0B, 0x0E, 0x70,
David Srbeckydd973932015-04-07 20:29:48 +0100413};
Mathieu Chartier97a21812015-10-16 09:29:31 -0700414// 0x00000000: daddiu r29, r29, -112
415// 0x00000004: .cfi_def_cfa_offset: 112
416// 0x00000004: sd r31, +104(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100417// 0x00000008: .cfi_offset: r31 at cfa-8
Mathieu Chartier97a21812015-10-16 09:29:31 -0700418// 0x00000008: sd r30, +96(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100419// 0x0000000c: .cfi_offset: r30 at cfa-16
Mathieu Chartier97a21812015-10-16 09:29:31 -0700420// 0x0000000c: sd r28, +88(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100421// 0x00000010: .cfi_offset: r28 at cfa-24
Mathieu Chartier97a21812015-10-16 09:29:31 -0700422// 0x00000010: sd r23, +80(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100423// 0x00000014: .cfi_offset: r23 at cfa-32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700424// 0x00000014: sd r22, +72(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100425// 0x00000018: .cfi_offset: r22 at cfa-40
Mathieu Chartier97a21812015-10-16 09:29:31 -0700426// 0x00000018: sd r21, +64(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100427// 0x0000001c: .cfi_offset: r21 at cfa-48
Mathieu Chartier97a21812015-10-16 09:29:31 -0700428// 0x0000001c: sd r20, +56(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100429// 0x00000020: .cfi_offset: r20 at cfa-56
Mathieu Chartier97a21812015-10-16 09:29:31 -0700430// 0x00000020: sd r19, +48(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100431// 0x00000024: .cfi_offset: r19 at cfa-64
Mathieu Chartier97a21812015-10-16 09:29:31 -0700432// 0x00000024: sd r18, +40(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100433// 0x00000028: .cfi_offset: r18 at cfa-72
Mathieu Chartiere401d142015-04-22 13:56:20 -0700434// 0x00000028: sd r4, +0(r29)
Mathieu Chartier97a21812015-10-16 09:29:31 -0700435// 0x0000002c: sw r5, +120(r29)
436// 0x00000030: swc1 f14, +124(r29)
437// 0x00000034: sw r7, +128(r29)
438// 0x00000038: sw r8, +132(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100439// 0x0000003c: daddiu r29, r29, -32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700440// 0x00000040: .cfi_def_cfa_offset: 144
David Srbeckydd973932015-04-07 20:29:48 +0100441// 0x00000040: daddiu r29, r29, 32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700442// 0x00000044: .cfi_def_cfa_offset: 112
David Srbeckydd973932015-04-07 20:29:48 +0100443// 0x00000044: .cfi_remember_state
Mathieu Chartier97a21812015-10-16 09:29:31 -0700444// 0x00000044: ld r18, +40(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100445// 0x00000048: .cfi_restore: r18
Mathieu Chartier97a21812015-10-16 09:29:31 -0700446// 0x00000048: ld r19, +48(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100447// 0x0000004c: .cfi_restore: r19
Mathieu Chartier97a21812015-10-16 09:29:31 -0700448// 0x0000004c: ld r20, +56(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100449// 0x00000050: .cfi_restore: r20
Mathieu Chartier97a21812015-10-16 09:29:31 -0700450// 0x00000050: ld r21, +64(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100451// 0x00000054: .cfi_restore: r21
Mathieu Chartier97a21812015-10-16 09:29:31 -0700452// 0x00000054: ld r22, +72(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100453// 0x00000058: .cfi_restore: r22
Mathieu Chartier97a21812015-10-16 09:29:31 -0700454// 0x00000058: ld r23, +80(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100455// 0x0000005c: .cfi_restore: r23
Mathieu Chartier97a21812015-10-16 09:29:31 -0700456// 0x0000005c: ld r28, +88(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100457// 0x00000060: .cfi_restore: r28
Mathieu Chartier97a21812015-10-16 09:29:31 -0700458// 0x00000060: ld r30, +96(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100459// 0x00000064: .cfi_restore: r30
Mathieu Chartier97a21812015-10-16 09:29:31 -0700460// 0x00000064: ld r31, +104(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100461// 0x00000068: .cfi_restore: r31
Mathieu Chartier97a21812015-10-16 09:29:31 -0700462// 0x00000068: daddiu r29, r29, 112
David Srbeckydd973932015-04-07 20:29:48 +0100463// 0x0000006c: .cfi_def_cfa_offset: 0
464// 0x0000006c: jr r31
465// 0x00000070: nop
466// 0x00000074: .cfi_restore_state
Mathieu Chartier97a21812015-10-16 09:29:31 -0700467// 0x00000074: .cfi_def_cfa_offset: 112
468