blob: d641fe425136f242cf5680ab8f5a2bfef1491efd [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,
Roland Levillain6d729a72017-06-30 18:34:01 +01004 0x08, 0xB0, 0x09, 0xB0, 0xBD, 0xEC, 0x10, 0x8A, 0xBD, 0xE8, 0xE0, 0x4D,
5 0xD9, 0xF8, 0x34, 0x80, 0x70, 0x47,
David Srbeckydd973932015-04-07 20:29:48 +01006};
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,
Vladimir Marko3a656e12016-08-02 14:57:56 +010014 0x4E, 0x0E, 0xA0, 0x01, 0x42, 0x0E, 0x80, 0x01, 0x0A, 0x42, 0x0E, 0x5C,
David Srbeckydd973932015-04-07 20:29:48 +010015 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,
Roland Levillain6d729a72017-06-30 18:34:01 +010017 0x5A, 0x06, 0x5B, 0x06, 0x5C, 0x06, 0x5D, 0x06, 0x5E, 0x06, 0x5F, 0x4A,
David Srbeckydd973932015-04-07 20:29:48 +010018 0x0B, 0x0E, 0x80, 0x01,
19};
Roland Levillain6d729a72017-06-30 18:34:01 +010020// 0x00000000: push {r5,r6,r7,r8,r10,r11,lr}
David Srbeckydd973932015-04-07 20:29:48 +010021// 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
Roland Levillain6d729a72017-06-30 18:34:01 +010029// 0x00000004: vpush {s16-s31}
David Srbeckydd973932015-04-07 20:29:48 +010030// 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
Roland Levillain6d729a72017-06-30 18:34:01 +010047// 0x00000008: sub sp, #36
David Srbeckydd973932015-04-07 20:29:48 +010048// 0x0000000a: .cfi_def_cfa_offset: 128
Roland Levillain6d729a72017-06-30 18:34:01 +010049// 0x0000000a: str r0, [sp]
Vladimir Marko3a656e12016-08-02 14:57:56 +010050// 0x0000000c: str r1, [sp, #132]
Roland Levillain6d729a72017-06-30 18:34:01 +010051// 0x0000000e: vstr s0, [sp, #136]
Vladimir Marko3a656e12016-08-02 14:57:56 +010052// 0x00000012: str r2, [sp, #140]
53// 0x00000014: str r3, [sp, #144]
Roland Levillain6d729a72017-06-30 18:34:01 +010054// 0x00000016: sub sp, #32
Vladimir Marko3a656e12016-08-02 14:57:56 +010055// 0x00000018: .cfi_def_cfa_offset: 160
Roland Levillain6d729a72017-06-30 18:34:01 +010056// 0x00000018: add sp, #32
Vladimir Marko3a656e12016-08-02 14:57:56 +010057// 0x0000001a: .cfi_def_cfa_offset: 128
58// 0x0000001a: .cfi_remember_state
Roland Levillain6d729a72017-06-30 18:34:01 +010059// 0x0000001a: add sp, #36
Vladimir Marko3a656e12016-08-02 14:57:56 +010060// 0x0000001c: .cfi_def_cfa_offset: 92
Roland Levillain6d729a72017-06-30 18:34:01 +010061// 0x0000001c: vpop {s16-s31}
Vladimir Marko3a656e12016-08-02 14:57:56 +010062// 0x00000020: .cfi_def_cfa_offset: 28
63// 0x00000020: .cfi_restore_extended: r80
64// 0x00000020: .cfi_restore_extended: r81
65// 0x00000020: .cfi_restore_extended: r82
66// 0x00000020: .cfi_restore_extended: r83
67// 0x00000020: .cfi_restore_extended: r84
68// 0x00000020: .cfi_restore_extended: r85
69// 0x00000020: .cfi_restore_extended: r86
70// 0x00000020: .cfi_restore_extended: r87
71// 0x00000020: .cfi_restore_extended: r88
72// 0x00000020: .cfi_restore_extended: r89
73// 0x00000020: .cfi_restore_extended: r90
74// 0x00000020: .cfi_restore_extended: r91
75// 0x00000020: .cfi_restore_extended: r92
76// 0x00000020: .cfi_restore_extended: r93
77// 0x00000020: .cfi_restore_extended: r94
78// 0x00000020: .cfi_restore_extended: r95
Roland Levillain6d729a72017-06-30 18:34:01 +010079// 0x00000020: pop {r5,r6,r7,r8,r10,r11,lr}
80// 0x00000024: ldr r8, [tr, #52] ; is_gc_marking
81// 0x00000028: bx lr
82// 0x0000002a: .cfi_restore_state
83// 0x0000002a: .cfi_def_cfa_offset: 128
David Srbeckydd973932015-04-07 20:29:48 +010084
85static constexpr uint8_t expected_asm_kArm64[] = {
Zheng Xu69a50302015-04-14 20:04:41 +080086 0xFF, 0x03, 0x03, 0xD1, 0xF3, 0x53, 0x06, 0xA9, 0xF5, 0x5B, 0x07, 0xA9,
87 0xF7, 0x63, 0x08, 0xA9, 0xF9, 0x6B, 0x09, 0xA9, 0xFB, 0x73, 0x0A, 0xA9,
88 0xFD, 0x7B, 0x0B, 0xA9, 0xE8, 0x27, 0x02, 0x6D, 0xEA, 0x2F, 0x03, 0x6D,
Mathieu Chartiere401d142015-04-22 13:56:20 -070089 0xEC, 0x37, 0x04, 0x6D, 0xEE, 0x3F, 0x05, 0x6D, 0xE0, 0x03, 0x00, 0xF9,
90 0xE1, 0xCB, 0x00, 0xB9, 0xE0, 0xCF, 0x00, 0xBD, 0xE2, 0xD3, 0x00, 0xB9,
91 0xE3, 0xD7, 0x00, 0xB9, 0xFF, 0x83, 0x00, 0xD1, 0xFF, 0x83, 0x00, 0x91,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +010092 0xF3, 0x53, 0x46, 0xA9, 0xF5, 0x5B, 0x47, 0xA9, 0xF7, 0x63, 0x48, 0xA9,
93 0xF9, 0x6B, 0x49, 0xA9, 0xFB, 0x73, 0x4A, 0xA9, 0xFD, 0x7B, 0x4B, 0xA9,
94 0xE8, 0x27, 0x42, 0x6D, 0xEA, 0x2F, 0x43, 0x6D, 0xEC, 0x37, 0x44, 0x6D,
Roland Levillain97c46462017-05-11 14:04:03 +010095 0xEE, 0x3F, 0x45, 0x6D, 0x74, 0x36, 0x40, 0xB9, 0xFF, 0x03, 0x03, 0x91,
96 0xC0, 0x03, 0x5F, 0xD6,
David Srbeckydd973932015-04-07 20:29:48 +010097};
98static constexpr uint8_t expected_cfi_kArm64[] = {
Zheng Xu69a50302015-04-14 20:04:41 +080099 0x44, 0x0E, 0xC0, 0x01, 0x44, 0x93, 0x18, 0x94, 0x16, 0x44, 0x95, 0x14,
100 0x96, 0x12, 0x44, 0x97, 0x10, 0x98, 0x0E, 0x44, 0x99, 0x0C, 0x9A, 0x0A,
101 0x44, 0x9B, 0x08, 0x9C, 0x06, 0x44, 0x9D, 0x04, 0x9E, 0x02, 0x44, 0x05,
102 0x48, 0x28, 0x05, 0x49, 0x26, 0x44, 0x05, 0x4A, 0x24, 0x05, 0x4B, 0x22,
103 0x44, 0x05, 0x4C, 0x20, 0x05, 0x4D, 0x1E, 0x44, 0x05, 0x4E, 0x1C, 0x05,
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100104 0x4F, 0x1A, 0x58, 0x0E, 0xE0, 0x01, 0x44, 0x0E, 0xC0, 0x01, 0x0A, 0x44,
105 0xD3, 0xD4, 0x44, 0xD5, 0xD6, 0x44, 0xD7, 0xD8, 0x44, 0xD9, 0xDA, 0x44,
106 0xDB, 0xDC, 0x44, 0xDD, 0xDE, 0x44, 0x06, 0x48, 0x06, 0x49, 0x44, 0x06,
107 0x4A, 0x06, 0x4B, 0x44, 0x06, 0x4C, 0x06, 0x4D, 0x44, 0x06, 0x4E, 0x06,
Roland Levillain97c46462017-05-11 14:04:03 +0100108 0x4F, 0x48, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0xC0, 0x01,
David Srbeckydd973932015-04-07 20:29:48 +0100109};
110// 0x00000000: sub sp, sp, #0xc0 (192)
111// 0x00000004: .cfi_def_cfa_offset: 192
Mathieu Chartiere401d142015-04-22 13:56:20 -0700112// 0x00000004: stp tr, x20, [sp, #96]
Zheng Xu69a50302015-04-14 20:04:41 +0800113// 0x00000008: .cfi_offset: r19 at cfa-96
114// 0x00000008: .cfi_offset: r20 at cfa-88
115// 0x00000008: stp x21, x22, [sp, #112]
116// 0x0000000c: .cfi_offset: r21 at cfa-80
117// 0x0000000c: .cfi_offset: r22 at cfa-72
118// 0x0000000c: stp x23, x24, [sp, #128]
119// 0x00000010: .cfi_offset: r23 at cfa-64
120// 0x00000010: .cfi_offset: r24 at cfa-56
121// 0x00000010: stp x25, x26, [sp, #144]
122// 0x00000014: .cfi_offset: r25 at cfa-48
123// 0x00000014: .cfi_offset: r26 at cfa-40
124// 0x00000014: stp x27, x28, [sp, #160]
125// 0x00000018: .cfi_offset: r27 at cfa-32
126// 0x00000018: .cfi_offset: r28 at cfa-24
127// 0x00000018: stp x29, lr, [sp, #176]
128// 0x0000001c: .cfi_offset: r29 at cfa-16
129// 0x0000001c: .cfi_offset: r30 at cfa-8
130// 0x0000001c: stp d8, d9, [sp, #32]
131// 0x00000020: .cfi_offset_extended: r72 at cfa-160
132// 0x00000020: .cfi_offset_extended: r73 at cfa-152
133// 0x00000020: stp d10, d11, [sp, #48]
134// 0x00000024: .cfi_offset_extended: r74 at cfa-144
135// 0x00000024: .cfi_offset_extended: r75 at cfa-136
136// 0x00000024: stp d12, d13, [sp, #64]
137// 0x00000028: .cfi_offset_extended: r76 at cfa-128
138// 0x00000028: .cfi_offset_extended: r77 at cfa-120
139// 0x00000028: stp d14, d15, [sp, #80]
140// 0x0000002c: .cfi_offset_extended: r78 at cfa-112
141// 0x0000002c: .cfi_offset_extended: r79 at cfa-104
Mathieu Chartiere401d142015-04-22 13:56:20 -0700142// 0x0000002c: str x0, [sp]
143// 0x00000030: str w1, [sp, #200]
144// 0x00000034: str s0, [sp, #204]
145// 0x00000038: str w2, [sp, #208]
146// 0x0000003c: str w3, [sp, #212]
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100147// 0x00000040: sub sp, sp, #0x20 (32)
148// 0x00000044: .cfi_def_cfa_offset: 224
149// 0x00000044: add sp, sp, #0x20 (32)
150// 0x00000048: .cfi_def_cfa_offset: 192
151// 0x00000048: .cfi_remember_state
Mathieu Chartiere401d142015-04-22 13:56:20 -0700152// 0x00000048: ldp tr, x20, [sp, #96]
Serban Constantinescu9bd88b02015-04-22 16:24:46 +0100153// 0x0000004c: .cfi_restore: r19
154// 0x0000004c: .cfi_restore: r20
155// 0x0000004c: ldp x21, x22, [sp, #112]
156// 0x00000050: .cfi_restore: r21
157// 0x00000050: .cfi_restore: r22
158// 0x00000050: ldp x23, x24, [sp, #128]
159// 0x00000054: .cfi_restore: r23
160// 0x00000054: .cfi_restore: r24
161// 0x00000054: ldp x25, x26, [sp, #144]
162// 0x00000058: .cfi_restore: r25
163// 0x00000058: .cfi_restore: r26
164// 0x00000058: ldp x27, x28, [sp, #160]
165// 0x0000005c: .cfi_restore: r27
166// 0x0000005c: .cfi_restore: r28
167// 0x0000005c: ldp x29, lr, [sp, #176]
168// 0x00000060: .cfi_restore: r29
169// 0x00000060: .cfi_restore: r30
170// 0x00000060: ldp d8, d9, [sp, #32]
171// 0x00000064: .cfi_restore_extended: r72
172// 0x00000064: .cfi_restore_extended: r73
173// 0x00000064: ldp d10, d11, [sp, #48]
174// 0x00000068: .cfi_restore_extended: r74
175// 0x00000068: .cfi_restore_extended: r75
176// 0x00000068: ldp d12, d13, [sp, #64]
177// 0x0000006c: .cfi_restore_extended: r76
178// 0x0000006c: .cfi_restore_extended: r77
179// 0x0000006c: ldp d14, d15, [sp, #80]
180// 0x00000070: .cfi_restore_extended: r78
181// 0x00000070: .cfi_restore_extended: r79
Roland Levillain97c46462017-05-11 14:04:03 +0100182// 0x00000070: ldr w20, [tr, #52] ; is_gc_marking
183// 0x00000074: add sp, sp, #0xc0 (192)
184// 0x00000078: .cfi_def_cfa_offset: 0
185// 0x00000078: ret
186// 0x0000007c: .cfi_restore_state
187// 0x0000007c: .cfi_def_cfa_offset: 192
David Srbeckydd973932015-04-07 20:29:48 +0100188
189static constexpr uint8_t expected_asm_kX86[] = {
190 0x57, 0x56, 0x55, 0x83, 0xC4, 0xE4, 0x50, 0x89, 0x4C, 0x24, 0x34, 0xF3,
191 0x0F, 0x11, 0x44, 0x24, 0x38, 0x89, 0x54, 0x24, 0x3C, 0x89, 0x5C, 0x24,
192 0x40, 0x83, 0xC4, 0xE0, 0x83, 0xC4, 0x20, 0x83, 0xC4, 0x20, 0x5D, 0x5E,
193 0x5F, 0xC3,
194};
195static constexpr uint8_t expected_cfi_kX86[] = {
196 0x41, 0x0E, 0x08, 0x87, 0x02, 0x41, 0x0E, 0x0C, 0x86, 0x03, 0x41, 0x0E,
197 0x10, 0x85, 0x04, 0x43, 0x0E, 0x2C, 0x41, 0x0E, 0x30, 0x55, 0x0E, 0x50,
198 0x43, 0x0E, 0x30, 0x0A, 0x43, 0x0E, 0x10, 0x41, 0x0E, 0x0C, 0xC5, 0x41,
199 0x0E, 0x08, 0xC6, 0x41, 0x0E, 0x04, 0xC7, 0x41, 0x0B, 0x0E, 0x30,
200};
201// 0x00000000: push edi
202// 0x00000001: .cfi_def_cfa_offset: 8
203// 0x00000001: .cfi_offset: r7 at cfa-8
204// 0x00000001: push esi
205// 0x00000002: .cfi_def_cfa_offset: 12
206// 0x00000002: .cfi_offset: r6 at cfa-12
207// 0x00000002: push ebp
208// 0x00000003: .cfi_def_cfa_offset: 16
209// 0x00000003: .cfi_offset: r5 at cfa-16
210// 0x00000003: add esp, -28
211// 0x00000006: .cfi_def_cfa_offset: 44
212// 0x00000006: push eax
213// 0x00000007: .cfi_def_cfa_offset: 48
214// 0x00000007: mov [esp + 52], ecx
215// 0x0000000b: movss [esp + 56], xmm0
216// 0x00000011: mov [esp + 60], edx
217// 0x00000015: mov [esp + 64], ebx
218// 0x00000019: add esp, -32
219// 0x0000001c: .cfi_def_cfa_offset: 80
220// 0x0000001c: add esp, 32
221// 0x0000001f: .cfi_def_cfa_offset: 48
222// 0x0000001f: .cfi_remember_state
223// 0x0000001f: add esp, 32
224// 0x00000022: .cfi_def_cfa_offset: 16
225// 0x00000022: pop ebp
226// 0x00000023: .cfi_def_cfa_offset: 12
227// 0x00000023: .cfi_restore: r5
228// 0x00000023: pop esi
229// 0x00000024: .cfi_def_cfa_offset: 8
230// 0x00000024: .cfi_restore: r6
231// 0x00000024: pop edi
232// 0x00000025: .cfi_def_cfa_offset: 4
233// 0x00000025: .cfi_restore: r7
234// 0x00000025: ret
235// 0x00000026: .cfi_restore_state
236// 0x00000026: .cfi_def_cfa_offset: 48
237
238static constexpr uint8_t expected_asm_kX86_64[] = {
239 0x41, 0x57, 0x41, 0x56, 0x41, 0x55, 0x41, 0x54, 0x55, 0x53, 0x48, 0x83,
240 0xEC, 0x48, 0xF2, 0x44, 0x0F, 0x11, 0x7C, 0x24, 0x40, 0xF2, 0x44, 0x0F,
241 0x11, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24, 0x30, 0xF2,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700242 0x44, 0x0F, 0x11, 0x64, 0x24, 0x28, 0x48, 0x89, 0x3C, 0x24, 0x89, 0xB4,
243 0x24, 0x88, 0x00, 0x00, 0x00, 0xF3, 0x0F, 0x11, 0x84, 0x24, 0x8C, 0x00,
244 0x00, 0x00, 0x89, 0x94, 0x24, 0x90, 0x00, 0x00, 0x00, 0x89, 0x8C, 0x24,
245 0x94, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC4, 0xE0, 0x48, 0x83, 0xC4, 0x20,
246 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x28, 0xF2, 0x44, 0x0F, 0x10, 0x6C,
247 0x24, 0x30, 0xF2, 0x44, 0x0F, 0x10, 0x74, 0x24, 0x38, 0xF2, 0x44, 0x0F,
248 0x10, 0x7C, 0x24, 0x40, 0x48, 0x83, 0xC4, 0x48, 0x5B, 0x5D, 0x41, 0x5C,
249 0x41, 0x5D, 0x41, 0x5E, 0x41, 0x5F, 0xC3,
David Srbeckydd973932015-04-07 20:29:48 +0100250};
251static constexpr uint8_t expected_cfi_kX86_64[] = {
252 0x42, 0x0E, 0x10, 0x8F, 0x04, 0x42, 0x0E, 0x18, 0x8E, 0x06, 0x42, 0x0E,
253 0x20, 0x8D, 0x08, 0x42, 0x0E, 0x28, 0x8C, 0x0A, 0x41, 0x0E, 0x30, 0x86,
254 0x0C, 0x41, 0x0E, 0x38, 0x83, 0x0E, 0x44, 0x0E, 0x80, 0x01, 0x47, 0xA0,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700255 0x10, 0x47, 0x9F, 0x12, 0x47, 0x9E, 0x14, 0x47, 0x9D, 0x16, 0x66, 0x0E,
David Srbeckydd973932015-04-07 20:29:48 +0100256 0xA0, 0x01, 0x44, 0x0E, 0x80, 0x01, 0x0A, 0x47, 0xDD, 0x47, 0xDE, 0x47,
257 0xDF, 0x47, 0xE0, 0x44, 0x0E, 0x38, 0x41, 0x0E, 0x30, 0xC3, 0x41, 0x0E,
258 0x28, 0xC6, 0x42, 0x0E, 0x20, 0xCC, 0x42, 0x0E, 0x18, 0xCD, 0x42, 0x0E,
259 0x10, 0xCE, 0x42, 0x0E, 0x08, 0xCF, 0x41, 0x0B, 0x0E, 0x80, 0x01,
260};
261// 0x00000000: push r15
262// 0x00000002: .cfi_def_cfa_offset: 16
263// 0x00000002: .cfi_offset: r15 at cfa-16
264// 0x00000002: push r14
265// 0x00000004: .cfi_def_cfa_offset: 24
266// 0x00000004: .cfi_offset: r14 at cfa-24
267// 0x00000004: push r13
268// 0x00000006: .cfi_def_cfa_offset: 32
269// 0x00000006: .cfi_offset: r13 at cfa-32
270// 0x00000006: push r12
271// 0x00000008: .cfi_def_cfa_offset: 40
272// 0x00000008: .cfi_offset: r12 at cfa-40
273// 0x00000008: push rbp
274// 0x00000009: .cfi_def_cfa_offset: 48
275// 0x00000009: .cfi_offset: r6 at cfa-48
276// 0x00000009: push rbx
277// 0x0000000a: .cfi_def_cfa_offset: 56
278// 0x0000000a: .cfi_offset: r3 at cfa-56
279// 0x0000000a: subq rsp, 72
280// 0x0000000e: .cfi_def_cfa_offset: 128
281// 0x0000000e: movsd [rsp + 64], xmm15
282// 0x00000015: .cfi_offset: r32 at cfa-64
283// 0x00000015: movsd [rsp + 56], xmm14
284// 0x0000001c: .cfi_offset: r31 at cfa-72
285// 0x0000001c: movsd [rsp + 48], xmm13
286// 0x00000023: .cfi_offset: r30 at cfa-80
287// 0x00000023: movsd [rsp + 40], xmm12
288// 0x0000002a: .cfi_offset: r29 at cfa-88
Mathieu Chartiere401d142015-04-22 13:56:20 -0700289// 0x0000002a: movq [rsp], rdi
290// 0x0000002e: mov [rsp + 136], esi
291// 0x00000035: movss [rsp + 140], xmm0
292// 0x0000003e: mov [rsp + 144], edx
293// 0x00000045: mov [rsp + 148], ecx
294// 0x0000004c: addq rsp, -32
295// 0x00000050: .cfi_def_cfa_offset: 160
296// 0x00000050: addq rsp, 32
297// 0x00000054: .cfi_def_cfa_offset: 128
298// 0x00000054: .cfi_remember_state
299// 0x00000054: movsd xmm12, [rsp + 40]
300// 0x0000005b: .cfi_restore: r29
301// 0x0000005b: movsd xmm13, [rsp + 48]
302// 0x00000062: .cfi_restore: r30
303// 0x00000062: movsd xmm14, [rsp + 56]
304// 0x00000069: .cfi_restore: r31
305// 0x00000069: movsd xmm15, [rsp + 64]
306// 0x00000070: .cfi_restore: r32
307// 0x00000070: addq rsp, 72
308// 0x00000074: .cfi_def_cfa_offset: 56
309// 0x00000074: pop rbx
310// 0x00000075: .cfi_def_cfa_offset: 48
311// 0x00000075: .cfi_restore: r3
312// 0x00000075: pop rbp
313// 0x00000076: .cfi_def_cfa_offset: 40
314// 0x00000076: .cfi_restore: r6
315// 0x00000076: pop r12
316// 0x00000078: .cfi_def_cfa_offset: 32
317// 0x00000078: .cfi_restore: r12
318// 0x00000078: pop r13
319// 0x0000007a: .cfi_def_cfa_offset: 24
320// 0x0000007a: .cfi_restore: r13
321// 0x0000007a: pop r14
322// 0x0000007c: .cfi_def_cfa_offset: 16
323// 0x0000007c: .cfi_restore: r14
324// 0x0000007c: pop r15
325// 0x0000007e: .cfi_def_cfa_offset: 8
326// 0x0000007e: .cfi_restore: r15
327// 0x0000007e: ret
328// 0x0000007f: .cfi_restore_state
329// 0x0000007f: .cfi_def_cfa_offset: 128
David Srbeckydd973932015-04-07 20:29:48 +0100330
331static constexpr uint8_t expected_asm_kMips[] = {
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200332 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xBE, 0xAF,
333 0x34, 0x00, 0xB7, 0xAF, 0x30, 0x00, 0xB6, 0xAF, 0x2C, 0x00, 0xB5, 0xAF,
334 0x28, 0x00, 0xB4, 0xAF, 0x24, 0x00, 0xB3, 0xAF, 0x20, 0x00, 0xB2, 0xAF,
Alexey Frunze1b8464d2016-11-12 17:22:05 -0800335 0x00, 0x00, 0xA4, 0xAF, 0x44, 0x00, 0xA5, 0xAF, 0x48, 0x00, 0xA8, 0xE7,
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200336 0x4C, 0x00, 0xA6, 0xAF, 0x50, 0x00, 0xA7, 0xAF, 0xE0, 0xFF, 0xBD, 0x27,
337 0x20, 0x00, 0xBD, 0x27, 0x20, 0x00, 0xB2, 0x8F, 0x24, 0x00, 0xB3, 0x8F,
338 0x28, 0x00, 0xB4, 0x8F, 0x2C, 0x00, 0xB5, 0x8F, 0x30, 0x00, 0xB6, 0x8F,
339 0x34, 0x00, 0xB7, 0x8F, 0x38, 0x00, 0xBE, 0x8F, 0x3C, 0x00, 0xBF, 0x8F,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700340 0x09, 0x00, 0xE0, 0x03, 0x40, 0x00, 0xBD, 0x27,
David Srbeckydd973932015-04-07 20:29:48 +0100341};
342static constexpr uint8_t expected_cfi_kMips[] = {
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200343 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x9E, 0x02, 0x44, 0x97, 0x03,
344 0x44, 0x96, 0x04, 0x44, 0x95, 0x05, 0x44, 0x94, 0x06, 0x44, 0x93, 0x07,
345 0x44, 0x92, 0x08, 0x58, 0x0E, 0x60, 0x44, 0x0E, 0x40, 0x0A, 0x44, 0xD2,
346 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6, 0x44, 0xD7, 0x44, 0xDE,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700347 0x44, 0xDF, 0x48, 0x0E, 0x00, 0x0B, 0x0E, 0x40,
David Srbeckydd973932015-04-07 20:29:48 +0100348};
349// 0x00000000: addiu r29, r29, -64
350// 0x00000004: .cfi_def_cfa_offset: 64
351// 0x00000004: sw r31, +60(r29)
352// 0x00000008: .cfi_offset: r31 at cfa-4
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200353// 0x00000008: sw r30, +56(r29)
354// 0x0000000c: .cfi_offset: r30 at cfa-8
355// 0x0000000c: sw r23, +52(r29)
356// 0x00000010: .cfi_offset: r23 at cfa-12
357// 0x00000010: sw r22, +48(r29)
358// 0x00000014: .cfi_offset: r22 at cfa-16
359// 0x00000014: sw r21, +44(r29)
360// 0x00000018: .cfi_offset: r21 at cfa-20
361// 0x00000018: sw r20, +40(r29)
362// 0x0000001c: .cfi_offset: r20 at cfa-24
363// 0x0000001c: sw r19, +36(r29)
364// 0x00000020: .cfi_offset: r19 at cfa-28
365// 0x00000020: sw r18, +32(r29)
366// 0x00000024: .cfi_offset: r18 at cfa-32
367// 0x00000024: sw r4, +0(r29)
368// 0x00000028: sw r5, +68(r29)
Alexey Frunze1b8464d2016-11-12 17:22:05 -0800369// 0x0000002c: swc1 f8, +72(r29)
Goran Jakovljevic23c1e502015-04-03 15:48:42 +0200370// 0x00000030: sw r6, +76(r29)
371// 0x00000034: sw r7, +80(r29)
372// 0x00000038: addiu r29, r29, -32
373// 0x0000003c: .cfi_def_cfa_offset: 96
374// 0x0000003c: addiu r29, r29, 32
375// 0x00000040: .cfi_def_cfa_offset: 64
376// 0x00000040: .cfi_remember_state
377// 0x00000040: lw r18, +32(r29)
378// 0x00000044: .cfi_restore: r18
379// 0x00000044: lw r19, +36(r29)
380// 0x00000048: .cfi_restore: r19
381// 0x00000048: lw r20, +40(r29)
382// 0x0000004c: .cfi_restore: r20
383// 0x0000004c: lw r21, +44(r29)
384// 0x00000050: .cfi_restore: r21
385// 0x00000050: lw r22, +48(r29)
386// 0x00000054: .cfi_restore: r22
387// 0x00000054: lw r23, +52(r29)
388// 0x00000058: .cfi_restore: r23
389// 0x00000058: lw r30, +56(r29)
390// 0x0000005c: .cfi_restore: r30
391// 0x0000005c: lw r31, +60(r29)
392// 0x00000060: .cfi_restore: r31
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700393// 0x00000060: jr r31
394// 0x00000064: addiu r29, r29, 64
395// 0x00000068: .cfi_def_cfa_offset: 0
396// 0x00000068: .cfi_restore_state
397// 0x00000068: .cfi_def_cfa_offset: 64
David Srbeckydd973932015-04-07 20:29:48 +0100398
399static constexpr uint8_t expected_asm_kMips64[] = {
Mathieu Chartier97a21812015-10-16 09:29:31 -0700400 0x90, 0xFF, 0xBD, 0x67, 0x68, 0x00, 0xBF, 0xFF, 0x60, 0x00, 0xBE, 0xFF,
401 0x58, 0x00, 0xBC, 0xFF, 0x50, 0x00, 0xB7, 0xFF, 0x48, 0x00, 0xB6, 0xFF,
402 0x40, 0x00, 0xB5, 0xFF, 0x38, 0x00, 0xB4, 0xFF, 0x30, 0x00, 0xB3, 0xFF,
403 0x28, 0x00, 0xB2, 0xFF, 0x00, 0x00, 0xA4, 0xFF, 0x78, 0x00, 0xA5, 0xAF,
404 0x7C, 0x00, 0xAE, 0xE7, 0x80, 0x00, 0xA7, 0xAF, 0x84, 0x00, 0xA8, 0xAF,
405 0xE0, 0xFF, 0xBD, 0x67, 0x20, 0x00, 0xBD, 0x67, 0x28, 0x00, 0xB2, 0xDF,
406 0x30, 0x00, 0xB3, 0xDF, 0x38, 0x00, 0xB4, 0xDF, 0x40, 0x00, 0xB5, 0xDF,
407 0x48, 0x00, 0xB6, 0xDF, 0x50, 0x00, 0xB7, 0xDF, 0x58, 0x00, 0xBC, 0xDF,
408 0x60, 0x00, 0xBE, 0xDF, 0x68, 0x00, 0xBF, 0xDF, 0x70, 0x00, 0xBD, 0x67,
David Srbeckydd973932015-04-07 20:29:48 +0100409 0x09, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00,
410};
411static constexpr uint8_t expected_cfi_kMips64[] = {
Mathieu Chartier97a21812015-10-16 09:29:31 -0700412 0x44, 0x0E, 0x70, 0x44, 0x9F, 0x02, 0x44, 0x9E, 0x04, 0x44, 0x9C, 0x06,
David Srbeckydd973932015-04-07 20:29:48 +0100413 0x44, 0x97, 0x08, 0x44, 0x96, 0x0A, 0x44, 0x95, 0x0C, 0x44, 0x94, 0x0E,
Mathieu Chartier97a21812015-10-16 09:29:31 -0700414 0x44, 0x93, 0x10, 0x44, 0x92, 0x12, 0x58, 0x0E, 0x90, 0x01, 0x44, 0x0E,
415 0x70, 0x0A, 0x44, 0xD2, 0x44, 0xD3, 0x44, 0xD4, 0x44, 0xD5, 0x44, 0xD6,
David Srbeckydd973932015-04-07 20:29:48 +0100416 0x44, 0xD7, 0x44, 0xDC, 0x44, 0xDE, 0x44, 0xDF, 0x44, 0x0E, 0x00, 0x48,
Mathieu Chartier97a21812015-10-16 09:29:31 -0700417 0x0B, 0x0E, 0x70,
David Srbeckydd973932015-04-07 20:29:48 +0100418};
Mathieu Chartier97a21812015-10-16 09:29:31 -0700419// 0x00000000: daddiu r29, r29, -112
420// 0x00000004: .cfi_def_cfa_offset: 112
421// 0x00000004: sd r31, +104(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100422// 0x00000008: .cfi_offset: r31 at cfa-8
Mathieu Chartier97a21812015-10-16 09:29:31 -0700423// 0x00000008: sd r30, +96(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100424// 0x0000000c: .cfi_offset: r30 at cfa-16
Mathieu Chartier97a21812015-10-16 09:29:31 -0700425// 0x0000000c: sd r28, +88(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100426// 0x00000010: .cfi_offset: r28 at cfa-24
Mathieu Chartier97a21812015-10-16 09:29:31 -0700427// 0x00000010: sd r23, +80(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100428// 0x00000014: .cfi_offset: r23 at cfa-32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700429// 0x00000014: sd r22, +72(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100430// 0x00000018: .cfi_offset: r22 at cfa-40
Mathieu Chartier97a21812015-10-16 09:29:31 -0700431// 0x00000018: sd r21, +64(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100432// 0x0000001c: .cfi_offset: r21 at cfa-48
Mathieu Chartier97a21812015-10-16 09:29:31 -0700433// 0x0000001c: sd r20, +56(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100434// 0x00000020: .cfi_offset: r20 at cfa-56
Mathieu Chartier97a21812015-10-16 09:29:31 -0700435// 0x00000020: sd r19, +48(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100436// 0x00000024: .cfi_offset: r19 at cfa-64
Mathieu Chartier97a21812015-10-16 09:29:31 -0700437// 0x00000024: sd r18, +40(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100438// 0x00000028: .cfi_offset: r18 at cfa-72
Mathieu Chartiere401d142015-04-22 13:56:20 -0700439// 0x00000028: sd r4, +0(r29)
Mathieu Chartier97a21812015-10-16 09:29:31 -0700440// 0x0000002c: sw r5, +120(r29)
441// 0x00000030: swc1 f14, +124(r29)
442// 0x00000034: sw r7, +128(r29)
443// 0x00000038: sw r8, +132(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100444// 0x0000003c: daddiu r29, r29, -32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700445// 0x00000040: .cfi_def_cfa_offset: 144
David Srbeckydd973932015-04-07 20:29:48 +0100446// 0x00000040: daddiu r29, r29, 32
Mathieu Chartier97a21812015-10-16 09:29:31 -0700447// 0x00000044: .cfi_def_cfa_offset: 112
David Srbeckydd973932015-04-07 20:29:48 +0100448// 0x00000044: .cfi_remember_state
Mathieu Chartier97a21812015-10-16 09:29:31 -0700449// 0x00000044: ld r18, +40(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100450// 0x00000048: .cfi_restore: r18
Mathieu Chartier97a21812015-10-16 09:29:31 -0700451// 0x00000048: ld r19, +48(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100452// 0x0000004c: .cfi_restore: r19
Mathieu Chartier97a21812015-10-16 09:29:31 -0700453// 0x0000004c: ld r20, +56(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100454// 0x00000050: .cfi_restore: r20
Mathieu Chartier97a21812015-10-16 09:29:31 -0700455// 0x00000050: ld r21, +64(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100456// 0x00000054: .cfi_restore: r21
Mathieu Chartier97a21812015-10-16 09:29:31 -0700457// 0x00000054: ld r22, +72(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100458// 0x00000058: .cfi_restore: r22
Mathieu Chartier97a21812015-10-16 09:29:31 -0700459// 0x00000058: ld r23, +80(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100460// 0x0000005c: .cfi_restore: r23
Mathieu Chartier97a21812015-10-16 09:29:31 -0700461// 0x0000005c: ld r28, +88(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100462// 0x00000060: .cfi_restore: r28
Mathieu Chartier97a21812015-10-16 09:29:31 -0700463// 0x00000060: ld r30, +96(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100464// 0x00000064: .cfi_restore: r30
Mathieu Chartier97a21812015-10-16 09:29:31 -0700465// 0x00000064: ld r31, +104(r29)
David Srbeckydd973932015-04-07 20:29:48 +0100466// 0x00000068: .cfi_restore: r31
Mathieu Chartier97a21812015-10-16 09:29:31 -0700467// 0x00000068: daddiu r29, r29, 112
David Srbeckydd973932015-04-07 20:29:48 +0100468// 0x0000006c: .cfi_def_cfa_offset: 0
469// 0x0000006c: jr r31
470// 0x00000070: nop
471// 0x00000074: .cfi_restore_state
Mathieu Chartier97a21812015-10-16 09:29:31 -0700472// 0x00000074: .cfi_def_cfa_offset: 112
473