blob: 4c99700d16dff1007e701e3ec9f6b7f58061d8a2 [file] [log] [blame]
David Srbeckyc6b4dd82015-04-07 20:32:43 +01001static constexpr uint8_t expected_asm_kThumb2[] = {
Nicolas Geoffray9989b162016-10-13 13:42:30 +01002 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x0B, 0xB0,
David Srbeckyc6b4dd82015-04-07 20:32:43 +01003 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,
Nicolas Geoffray9989b162016-10-13 13:42:30 +01007 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x0A, 0x42,
David Srbeckyc6b4dd82015-04-07 20:32:43 +01008 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
Nicolas Geoffray9989b162016-10-13 13:42:30 +010022// 0x00000008: .cfi_remember_state
23// 0x00000008: add sp, sp, #44
24// 0x0000000a: .cfi_def_cfa_offset: 20
25// 0x0000000a: vpop.f32 {s16-s17}
26// 0x0000000e: .cfi_def_cfa_offset: 12
27// 0x0000000e: .cfi_restore_extended: r80
28// 0x0000000e: .cfi_restore_extended: r81
29// 0x0000000e: pop {r5, r6, pc}
30// 0x00000010: .cfi_restore_state
31// 0x00000010: .cfi_def_cfa_offset: 64
David Srbeckyc6b4dd82015-04-07 20:32:43 +010032
33static constexpr uint8_t expected_asm_kArm64[] = {
Roland Levillain97c46462017-05-11 14:04:03 +010034 0xFF, 0x03, 0x01, 0xD1, 0xF5, 0x17, 0x00, 0xF9, 0xF6, 0x7B, 0x03, 0xA9,
35 0xE8, 0xA7, 0x01, 0x6D, 0xE8, 0xA7, 0x41, 0x6D, 0xF5, 0x17, 0x40, 0xF9,
36 0xF6, 0x7B, 0x43, 0xA9, 0xFF, 0x03, 0x01, 0x91, 0xC0, 0x03, 0x5F, 0xD6,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010037};
38static constexpr uint8_t expected_cfi_kArm64[] = {
Roland Levillain97c46462017-05-11 14:04:03 +010039 0x44, 0x0E, 0x40, 0x44, 0x95, 0x06, 0x44, 0x96, 0x04, 0x9E, 0x02, 0x44,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010040 0x05, 0x48, 0x0A, 0x05, 0x49, 0x08, 0x0A, 0x44, 0x06, 0x48, 0x06, 0x49,
Roland Levillain97c46462017-05-11 14:04:03 +010041 0x44, 0xD5, 0x44, 0xD6, 0xDE, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0x40,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010042};
Nicolas Geoffray9989b162016-10-13 13:42:30 +010043// 0x00000000: sub sp, sp, #0x40 (64)
David Srbeckyc6b4dd82015-04-07 20:32:43 +010044// 0x00000004: .cfi_def_cfa_offset: 64
Roland Levillain97c46462017-05-11 14:04:03 +010045// 0x00000004: str x21, [sp, #40]
46// 0x00000008: .cfi_offset: r21 at cfa-24
47// 0x00000008: stp x22, lr, [sp, #48]
48// 0x0000000c: .cfi_offset: r22 at cfa-16
David Srbeckyc6b4dd82015-04-07 20:32:43 +010049// 0x0000000c: .cfi_offset: r30 at cfa-8
50// 0x0000000c: stp d8, d9, [sp, #24]
51// 0x00000010: .cfi_offset_extended: r72 at cfa-40
52// 0x00000010: .cfi_offset_extended: r73 at cfa-32
53// 0x00000010: .cfi_remember_state
54// 0x00000010: ldp d8, d9, [sp, #24]
55// 0x00000014: .cfi_restore_extended: r72
56// 0x00000014: .cfi_restore_extended: r73
Roland Levillain97c46462017-05-11 14:04:03 +010057// 0x00000014: ldr x21, [sp, #40]
58// 0x00000018: .cfi_restore: r21
59// 0x00000018: ldp x22, lr, [sp, #48]
60// 0x0000001c: .cfi_restore: r22
David Srbeckyc6b4dd82015-04-07 20:32:43 +010061// 0x0000001c: .cfi_restore: r30
62// 0x0000001c: add sp, sp, #0x40 (64)
63// 0x00000020: .cfi_def_cfa_offset: 0
64// 0x00000020: ret
65// 0x00000024: .cfi_restore_state
66// 0x00000024: .cfi_def_cfa_offset: 64
67
68static constexpr uint8_t expected_asm_kX86[] = {
Nicolas Geoffray9989b162016-10-13 13:42:30 +010069 0x56, 0x55, 0x83, 0xEC, 0x34, 0x83, 0xC4, 0x34, 0x5D,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010070 0x5E, 0xC3,
71};
72static constexpr uint8_t expected_cfi_kX86[] = {
73 0x41, 0x0E, 0x08, 0x86, 0x02, 0x41, 0x0E, 0x0C, 0x85, 0x03, 0x43, 0x0E,
Nicolas Geoffray9989b162016-10-13 13:42:30 +010074 0x40, 0x0A, 0x43, 0x0E, 0x0C, 0x41, 0x0E, 0x08, 0xC5, 0x41, 0x0E,
David Srbeckyc6b4dd82015-04-07 20:32:43 +010075 0x04, 0xC6, 0x41, 0x0B, 0x0E, 0x40,
76};
77// 0x00000000: push esi
78// 0x00000001: .cfi_def_cfa_offset: 8
79// 0x00000001: .cfi_offset: r6 at cfa-8
80// 0x00000001: push ebp
81// 0x00000002: .cfi_def_cfa_offset: 12
82// 0x00000002: .cfi_offset: r5 at cfa-12
83// 0x00000002: sub esp, 52
84// 0x00000005: .cfi_def_cfa_offset: 64
Nicolas Geoffray9989b162016-10-13 13:42:30 +010085// 0x00000005: .cfi_remember_state
86// 0x00000005: add esp, 52
87// 0x00000008: .cfi_def_cfa_offset: 12
88// 0x00000008: pop ebp
89// 0x0000000a: .cfi_def_cfa_offset: 8
90// 0x0000000a: .cfi_restore: r5
91// 0x0000000a: pop esi
92// 0x0000000b: .cfi_def_cfa_offset: 4
93// 0x0000000b: .cfi_restore: r6
94// 0x0000000b: ret
95// 0x0000000c: .cfi_restore_state
96// 0x0000000c: .cfi_def_cfa_offset: 64
David Srbeckyc6b4dd82015-04-07 20:32:43 +010097
98static constexpr uint8_t expected_asm_kX86_64[] = {
99 0x55, 0x53, 0x48, 0x83, 0xEC, 0x28, 0xF2, 0x44, 0x0F, 0x11, 0x6C, 0x24,
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100100 0x20, 0xF2, 0x44, 0x0F, 0x11, 0x64, 0x24, 0x18,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700101 0xF2, 0x44, 0x0F, 0x10, 0x64, 0x24, 0x18, 0xF2, 0x44, 0x0F, 0x10, 0x6C,
102 0x24, 0x20, 0x48, 0x83, 0xC4, 0x28, 0x5B, 0x5D, 0xC3,
David Srbeckyc6b4dd82015-04-07 20:32:43 +0100103};
104static constexpr uint8_t expected_cfi_kX86_64[] = {
105 0x41, 0x0E, 0x10, 0x86, 0x04, 0x41, 0x0E, 0x18, 0x83, 0x06, 0x44, 0x0E,
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100106 0x40, 0x47, 0x9E, 0x08, 0x47, 0x9D, 0x0A, 0x0A, 0x47, 0xDD, 0x47,
David Srbeckyc6b4dd82015-04-07 20:32:43 +0100107 0xDE, 0x44, 0x0E, 0x18, 0x41, 0x0E, 0x10, 0xC3, 0x41, 0x0E, 0x08, 0xC6,
108 0x41, 0x0B, 0x0E, 0x40,
109};
110// 0x00000000: push rbp
111// 0x00000001: .cfi_def_cfa_offset: 16
112// 0x00000001: .cfi_offset: r6 at cfa-16
113// 0x00000001: push rbx
114// 0x00000002: .cfi_def_cfa_offset: 24
115// 0x00000002: .cfi_offset: r3 at cfa-24
116// 0x00000002: subq rsp, 40
117// 0x00000006: .cfi_def_cfa_offset: 64
118// 0x00000006: movsd [rsp + 32], xmm13
119// 0x0000000d: .cfi_offset: r30 at cfa-32
120// 0x0000000d: movsd [rsp + 24], xmm12
121// 0x00000014: .cfi_offset: r29 at cfa-40
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100122// 0x00000014: .cfi_remember_state
123// 0x00000014: movsd xmm12, [rsp + 24]
124// 0x0000001c: .cfi_restore: r29
125// 0x0000001c: movsd xmm13, [rsp + 32]
126// 0x00000022: .cfi_restore: r30
127// 0x00000022: addq rsp, 40
128// 0x00000026: .cfi_def_cfa_offset: 24
129// 0x00000026: pop rbx
130// 0x00000027: .cfi_def_cfa_offset: 16
131// 0x00000027: .cfi_restore: r3
132// 0x00000027: pop rbp
133// 0x00000028: .cfi_def_cfa_offset: 8
134// 0x00000028: .cfi_restore: r6
135// 0x00000028: ret
136// 0x00000029: .cfi_restore_state
137// 0x00000029: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100138
Vladimir Marko10ef6942015-10-22 15:25:54 +0100139static constexpr uint8_t expected_asm_kThumb2_adjust[] = {
Nicolas Geoffray467d94a2017-03-16 10:24:17 +0000140 // VIXL emits an extra 2 bytes here for a 32-bit beq as there is no
141 // optimistic 16-bit emit and subsequent fixup for out of reach targets
142 // as with the old assembler.
143 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x28, 0x00, 0xF0,
144 0x41, 0x80, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100145 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
146 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
147 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
148 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
149 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
150 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
151 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
152 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
153 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
154 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
155 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD,
156};
157static constexpr uint8_t expected_cfi_kThumb2_adjust[] = {
158 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14,
Nicolas Geoffray467d94a2017-03-16 10:24:17 +0000159 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100160 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B,
161 0x0E, 0x40,
162};
163// 0x00000000: push {r5, r6, lr}
164// 0x00000002: .cfi_def_cfa_offset: 12
165// 0x00000002: .cfi_offset: r5 at cfa-12
166// 0x00000002: .cfi_offset: r6 at cfa-8
167// 0x00000002: .cfi_offset: r14 at cfa-4
168// 0x00000002: vpush.f32 {s16-s17}
169// 0x00000006: .cfi_def_cfa_offset: 20
170// 0x00000006: .cfi_offset_extended: r80 at cfa-20
171// 0x00000006: .cfi_offset_extended: r81 at cfa-16
172// 0x00000006: sub sp, sp, #44
173// 0x00000008: .cfi_def_cfa_offset: 64
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100174// 0x00000008: cmp r0, #0
175// 0x0000000a: beq +128 (0x00000090)
176// 0x0000000c: ldr r0, [r0, #0]
Vladimir Marko10ef6942015-10-22 15:25:54 +0100177// 0x0000000e: ldr r0, [r0, #0]
178// 0x00000010: ldr r0, [r0, #0]
179// 0x00000012: ldr r0, [r0, #0]
180// 0x00000014: ldr r0, [r0, #0]
181// 0x00000016: ldr r0, [r0, #0]
182// 0x00000018: ldr r0, [r0, #0]
183// 0x0000001a: ldr r0, [r0, #0]
184// 0x0000001c: ldr r0, [r0, #0]
185// 0x0000001e: ldr r0, [r0, #0]
186// 0x00000020: ldr r0, [r0, #0]
187// 0x00000022: ldr r0, [r0, #0]
188// 0x00000024: ldr r0, [r0, #0]
189// 0x00000026: ldr r0, [r0, #0]
190// 0x00000028: ldr r0, [r0, #0]
191// 0x0000002a: ldr r0, [r0, #0]
192// 0x0000002c: ldr r0, [r0, #0]
193// 0x0000002e: ldr r0, [r0, #0]
194// 0x00000030: ldr r0, [r0, #0]
195// 0x00000032: ldr r0, [r0, #0]
196// 0x00000034: ldr r0, [r0, #0]
197// 0x00000036: ldr r0, [r0, #0]
198// 0x00000038: ldr r0, [r0, #0]
199// 0x0000003a: ldr r0, [r0, #0]
200// 0x0000003c: ldr r0, [r0, #0]
201// 0x0000003e: ldr r0, [r0, #0]
202// 0x00000040: ldr r0, [r0, #0]
203// 0x00000042: ldr r0, [r0, #0]
204// 0x00000044: ldr r0, [r0, #0]
205// 0x00000046: ldr r0, [r0, #0]
206// 0x00000048: ldr r0, [r0, #0]
207// 0x0000004a: ldr r0, [r0, #0]
208// 0x0000004c: ldr r0, [r0, #0]
209// 0x0000004e: ldr r0, [r0, #0]
210// 0x00000050: ldr r0, [r0, #0]
211// 0x00000052: ldr r0, [r0, #0]
212// 0x00000054: ldr r0, [r0, #0]
213// 0x00000056: ldr r0, [r0, #0]
214// 0x00000058: ldr r0, [r0, #0]
215// 0x0000005a: ldr r0, [r0, #0]
216// 0x0000005c: ldr r0, [r0, #0]
217// 0x0000005e: ldr r0, [r0, #0]
218// 0x00000060: ldr r0, [r0, #0]
219// 0x00000062: ldr r0, [r0, #0]
220// 0x00000064: ldr r0, [r0, #0]
221// 0x00000066: ldr r0, [r0, #0]
222// 0x00000068: ldr r0, [r0, #0]
223// 0x0000006a: ldr r0, [r0, #0]
224// 0x0000006c: ldr r0, [r0, #0]
225// 0x0000006e: ldr r0, [r0, #0]
226// 0x00000070: ldr r0, [r0, #0]
227// 0x00000072: ldr r0, [r0, #0]
228// 0x00000074: ldr r0, [r0, #0]
229// 0x00000076: ldr r0, [r0, #0]
230// 0x00000078: ldr r0, [r0, #0]
231// 0x0000007a: ldr r0, [r0, #0]
232// 0x0000007c: ldr r0, [r0, #0]
233// 0x0000007e: ldr r0, [r0, #0]
234// 0x00000080: ldr r0, [r0, #0]
235// 0x00000082: ldr r0, [r0, #0]
236// 0x00000084: ldr r0, [r0, #0]
237// 0x00000086: ldr r0, [r0, #0]
238// 0x00000088: ldr r0, [r0, #0]
239// 0x0000008a: ldr r0, [r0, #0]
240// 0x0000008c: ldr r0, [r0, #0]
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100241// 0x0000008e: .cfi_remember_state
242// 0x0000008e: add sp, sp, #44
243// 0x00000090: .cfi_def_cfa_offset: 20
244// 0x00000090: vpop.f32 {s16-s17}
245// 0x00000094: .cfi_def_cfa_offset: 12
246// 0x00000094: .cfi_restore_extended: r80
247// 0x00000094: .cfi_restore_extended: r81
248// 0x00000094: pop {r5, r6, pc}
249// 0x00000096: .cfi_restore_state
250// 0x00000096: .cfi_def_cfa_offset: 64