blob: fde55cb92fc314ec7aefd1d0b1d85f1f61417015 [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
139static constexpr uint8_t expected_asm_kMips[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700140 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB1, 0xAF,
141 0x34, 0x00, 0xB0, 0xAF, 0x28, 0x00, 0xB6, 0xF7, 0x20, 0x00, 0xB4, 0xF7,
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100142 0x3C, 0x00, 0xBF, 0x8F, 0x38, 0x00, 0xB1, 0x8F,
Alexey Frunze73296a72016-06-03 22:51:46 -0700143 0x34, 0x00, 0xB0, 0x8F, 0x28, 0x00, 0xB6, 0xD7, 0x20, 0x00, 0xB4, 0xD7,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700144 0x09, 0x00, 0xE0, 0x03, 0x40, 0x00, 0xBD, 0x27,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100145};
146static constexpr uint8_t expected_cfi_kMips[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700147 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100148 0x48, 0x0A, 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x50, 0x0E, 0x00, 0x0B,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700149 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100150};
Alexey Frunze0cab6562017-07-25 15:19:36 -0700151// 0x00000000: addiu sp, sp, -64
Alexey Frunze73296a72016-06-03 22:51:46 -0700152// 0x00000004: .cfi_def_cfa_offset: 64
Alexey Frunze0cab6562017-07-25 15:19:36 -0700153// 0x00000004: sw ra, +60(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100154// 0x00000008: .cfi_offset: r31 at cfa-4
Alexey Frunze0cab6562017-07-25 15:19:36 -0700155// 0x00000008: sw s1, +56(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100156// 0x0000000c: .cfi_offset: r17 at cfa-8
Alexey Frunze0cab6562017-07-25 15:19:36 -0700157// 0x0000000c: sw s0, +52(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100158// 0x00000010: .cfi_offset: r16 at cfa-12
Alexey Frunze0cab6562017-07-25 15:19:36 -0700159// 0x00000010: sdc1 f22, +40(sp)
160// 0x00000014: sdc1 f20, +32(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100161// 0x00000018: .cfi_remember_state
Alexey Frunze0cab6562017-07-25 15:19:36 -0700162// 0x00000018: lw ra, +60(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100163// 0x0000001c: .cfi_restore: r31
Alexey Frunze0cab6562017-07-25 15:19:36 -0700164// 0x0000001c: lw s1, +56(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100165// 0x00000020: .cfi_restore: r17
Alexey Frunze0cab6562017-07-25 15:19:36 -0700166// 0x00000020: lw s0, +52(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100167// 0x00000024: .cfi_restore: r16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700168// 0x00000024: ldc1 f22, +40(sp)
169// 0x00000028: ldc1 f20, +32(sp)
170// 0x0000002c: jr ra
171// 0x00000030: addiu sp, sp, 64
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100172// 0x00000034: .cfi_def_cfa_offset: 0
173// 0x00000034: .cfi_restore_state
174// 0x00000034: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100175
176static constexpr uint8_t expected_asm_kMips64[] = {
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700177 0xC0, 0xFF, 0xBD, 0x67, 0x38, 0x00, 0xBF, 0xFF, 0x30, 0x00, 0xB1, 0xFF,
178 0x28, 0x00, 0xB0, 0xFF, 0x20, 0x00, 0xB9, 0xF7, 0x18, 0x00, 0xB8, 0xF7,
179 0x38, 0x00, 0xBF, 0xDF, 0x30, 0x00, 0xB1, 0xDF, 0x28, 0x00, 0xB0, 0xDF,
180 0x20, 0x00, 0xB9, 0xD7, 0x18, 0x00, 0xB8, 0xD7, 0x40, 0x00, 0xBD, 0x67,
181 0x00, 0x00, 0x1F, 0xD8,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100182};
183static constexpr uint8_t expected_cfi_kMips64[] = {
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700184 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
185 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x0A, 0x44, 0xDF, 0x44, 0xD1, 0x44,
186 0xD0, 0x44, 0xF9, 0x44, 0xF8, 0x44, 0x0E, 0x00, 0x44, 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100187};
Alexey Frunze0cab6562017-07-25 15:19:36 -0700188// 0x00000000: daddiu sp, sp, -64
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700189// 0x00000004: .cfi_def_cfa_offset: 64
Alexey Frunze0cab6562017-07-25 15:19:36 -0700190// 0x00000004: sd ra, +56(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100191// 0x00000008: .cfi_offset: r31 at cfa-8
Alexey Frunze0cab6562017-07-25 15:19:36 -0700192// 0x00000008: sd s1, +48(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100193// 0x0000000c: .cfi_offset: r17 at cfa-16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700194// 0x0000000c: sd s0, +40(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100195// 0x00000010: .cfi_offset: r16 at cfa-24
Alexey Frunze0cab6562017-07-25 15:19:36 -0700196// 0x00000010: sdc1 f25, +32(sp)
David Srbeckyba702002016-02-01 18:15:29 +0000197// 0x00000014: .cfi_offset: r57 at cfa-32
Alexey Frunze0cab6562017-07-25 15:19:36 -0700198// 0x00000014: sdc1 f24, +24(sp)
David Srbeckyba702002016-02-01 18:15:29 +0000199// 0x00000018: .cfi_offset: r56 at cfa-40
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700200// 0x00000018: .cfi_remember_state
Alexey Frunze0cab6562017-07-25 15:19:36 -0700201// 0x00000018: ld ra, +56(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700202// 0x0000001c: .cfi_restore: r31
Alexey Frunze0cab6562017-07-25 15:19:36 -0700203// 0x0000001c: ld s1, +48(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700204// 0x00000020: .cfi_restore: r17
Alexey Frunze0cab6562017-07-25 15:19:36 -0700205// 0x00000020: ld s0, +40(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700206// 0x00000024: .cfi_restore: r16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700207// 0x00000024: ldc1 f25, +32(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100208// 0x00000028: .cfi_restore: r57
Alexey Frunze0cab6562017-07-25 15:19:36 -0700209// 0x00000028: ldc1 f24, +24(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700210// 0x0000002c: .cfi_restore: r56
Alexey Frunze0cab6562017-07-25 15:19:36 -0700211// 0x0000002c: daddiu sp, sp, 64
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700212// 0x00000030: .cfi_def_cfa_offset: 0
Alexey Frunze0cab6562017-07-25 15:19:36 -0700213// 0x00000030: jic ra, 0
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700214// 0x00000034: .cfi_restore_state
215// 0x00000034: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100216
217static constexpr uint8_t expected_asm_kThumb2_adjust[] = {
Nicolas Geoffray467d94a2017-03-16 10:24:17 +0000218 // VIXL emits an extra 2 bytes here for a 32-bit beq as there is no
219 // optimistic 16-bit emit and subsequent fixup for out of reach targets
220 // as with the old assembler.
221 0x60, 0xB5, 0x2D, 0xED, 0x02, 0x8A, 0x8B, 0xB0, 0x00, 0x28, 0x00, 0xF0,
222 0x41, 0x80, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100223 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
224 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
225 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
226 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
227 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
228 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
229 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
230 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
231 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
232 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68,
233 0x0B, 0xB0, 0xBD, 0xEC, 0x02, 0x8A, 0x60, 0xBD,
234};
235static constexpr uint8_t expected_cfi_kThumb2_adjust[] = {
236 0x42, 0x0E, 0x0C, 0x85, 0x03, 0x86, 0x02, 0x8E, 0x01, 0x44, 0x0E, 0x14,
Nicolas Geoffray467d94a2017-03-16 10:24:17 +0000237 0x05, 0x50, 0x05, 0x05, 0x51, 0x04, 0x42, 0x0E, 0x40, 0x02, 0x88, 0x0A,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100238 0x42, 0x0E, 0x14, 0x44, 0x0E, 0x0C, 0x06, 0x50, 0x06, 0x51, 0x42, 0x0B,
239 0x0E, 0x40,
240};
241// 0x00000000: push {r5, r6, lr}
242// 0x00000002: .cfi_def_cfa_offset: 12
243// 0x00000002: .cfi_offset: r5 at cfa-12
244// 0x00000002: .cfi_offset: r6 at cfa-8
245// 0x00000002: .cfi_offset: r14 at cfa-4
246// 0x00000002: vpush.f32 {s16-s17}
247// 0x00000006: .cfi_def_cfa_offset: 20
248// 0x00000006: .cfi_offset_extended: r80 at cfa-20
249// 0x00000006: .cfi_offset_extended: r81 at cfa-16
250// 0x00000006: sub sp, sp, #44
251// 0x00000008: .cfi_def_cfa_offset: 64
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100252// 0x00000008: cmp r0, #0
253// 0x0000000a: beq +128 (0x00000090)
254// 0x0000000c: ldr r0, [r0, #0]
Vladimir Marko10ef6942015-10-22 15:25:54 +0100255// 0x0000000e: ldr r0, [r0, #0]
256// 0x00000010: ldr r0, [r0, #0]
257// 0x00000012: ldr r0, [r0, #0]
258// 0x00000014: ldr r0, [r0, #0]
259// 0x00000016: ldr r0, [r0, #0]
260// 0x00000018: ldr r0, [r0, #0]
261// 0x0000001a: ldr r0, [r0, #0]
262// 0x0000001c: ldr r0, [r0, #0]
263// 0x0000001e: ldr r0, [r0, #0]
264// 0x00000020: ldr r0, [r0, #0]
265// 0x00000022: ldr r0, [r0, #0]
266// 0x00000024: ldr r0, [r0, #0]
267// 0x00000026: ldr r0, [r0, #0]
268// 0x00000028: ldr r0, [r0, #0]
269// 0x0000002a: ldr r0, [r0, #0]
270// 0x0000002c: ldr r0, [r0, #0]
271// 0x0000002e: ldr r0, [r0, #0]
272// 0x00000030: ldr r0, [r0, #0]
273// 0x00000032: ldr r0, [r0, #0]
274// 0x00000034: ldr r0, [r0, #0]
275// 0x00000036: ldr r0, [r0, #0]
276// 0x00000038: ldr r0, [r0, #0]
277// 0x0000003a: ldr r0, [r0, #0]
278// 0x0000003c: ldr r0, [r0, #0]
279// 0x0000003e: ldr r0, [r0, #0]
280// 0x00000040: ldr r0, [r0, #0]
281// 0x00000042: ldr r0, [r0, #0]
282// 0x00000044: ldr r0, [r0, #0]
283// 0x00000046: ldr r0, [r0, #0]
284// 0x00000048: ldr r0, [r0, #0]
285// 0x0000004a: ldr r0, [r0, #0]
286// 0x0000004c: ldr r0, [r0, #0]
287// 0x0000004e: ldr r0, [r0, #0]
288// 0x00000050: ldr r0, [r0, #0]
289// 0x00000052: ldr r0, [r0, #0]
290// 0x00000054: ldr r0, [r0, #0]
291// 0x00000056: ldr r0, [r0, #0]
292// 0x00000058: ldr r0, [r0, #0]
293// 0x0000005a: ldr r0, [r0, #0]
294// 0x0000005c: ldr r0, [r0, #0]
295// 0x0000005e: ldr r0, [r0, #0]
296// 0x00000060: ldr r0, [r0, #0]
297// 0x00000062: ldr r0, [r0, #0]
298// 0x00000064: ldr r0, [r0, #0]
299// 0x00000066: ldr r0, [r0, #0]
300// 0x00000068: ldr r0, [r0, #0]
301// 0x0000006a: ldr r0, [r0, #0]
302// 0x0000006c: ldr r0, [r0, #0]
303// 0x0000006e: ldr r0, [r0, #0]
304// 0x00000070: ldr r0, [r0, #0]
305// 0x00000072: ldr r0, [r0, #0]
306// 0x00000074: ldr r0, [r0, #0]
307// 0x00000076: ldr r0, [r0, #0]
308// 0x00000078: ldr r0, [r0, #0]
309// 0x0000007a: ldr r0, [r0, #0]
310// 0x0000007c: ldr r0, [r0, #0]
311// 0x0000007e: ldr r0, [r0, #0]
312// 0x00000080: ldr r0, [r0, #0]
313// 0x00000082: ldr r0, [r0, #0]
314// 0x00000084: ldr r0, [r0, #0]
315// 0x00000086: ldr r0, [r0, #0]
316// 0x00000088: ldr r0, [r0, #0]
317// 0x0000008a: ldr r0, [r0, #0]
318// 0x0000008c: ldr r0, [r0, #0]
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100319// 0x0000008e: .cfi_remember_state
320// 0x0000008e: add sp, sp, #44
321// 0x00000090: .cfi_def_cfa_offset: 20
322// 0x00000090: vpop.f32 {s16-s17}
323// 0x00000094: .cfi_def_cfa_offset: 12
324// 0x00000094: .cfi_restore_extended: r80
325// 0x00000094: .cfi_restore_extended: r81
326// 0x00000094: pop {r5, r6, pc}
327// 0x00000096: .cfi_restore_state
328// 0x00000096: .cfi_def_cfa_offset: 64
Vladimir Marko10ef6942015-10-22 15:25:54 +0100329
330static constexpr uint8_t expected_asm_kMips_adjust_head[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700331 0xC0, 0xFF, 0xBD, 0x27, 0x3C, 0x00, 0xBF, 0xAF, 0x38, 0x00, 0xB1, 0xAF,
332 0x34, 0x00, 0xB0, 0xAF, 0x28, 0x00, 0xB6, 0xF7, 0x20, 0x00, 0xB4, 0xF7,
Alexey Frunze0cab6562017-07-25 15:19:36 -0700333 0x08, 0x00, 0x80, 0x14, 0xFC, 0xFF, 0xBD, 0x27,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100334 0x00, 0x00, 0xBF, 0xAF, 0x00, 0x00, 0x10, 0x04, 0x02, 0x00, 0x01, 0x3C,
335 0x18, 0x00, 0x21, 0x34, 0x21, 0x08, 0x3F, 0x00, 0x00, 0x00, 0xBF, 0x8F,
336 0x09, 0x00, 0x20, 0x00, 0x04, 0x00, 0xBD, 0x27,
337};
338static constexpr uint8_t expected_asm_kMips_adjust_tail[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700339 0x3C, 0x00, 0xBF, 0x8F, 0x38, 0x00, 0xB1, 0x8F, 0x34, 0x00, 0xB0, 0x8F,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700340 0x28, 0x00, 0xB6, 0xD7, 0x20, 0x00, 0xB4, 0xD7, 0x09, 0x00, 0xE0, 0x03,
341 0x40, 0x00, 0xBD, 0x27,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100342};
343static constexpr uint8_t expected_cfi_kMips_adjust[] = {
Alexey Frunze73296a72016-06-03 22:51:46 -0700344 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x01, 0x44, 0x91, 0x02, 0x44, 0x90, 0x03,
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100345 0x50, 0x0E, 0x44, 0x60, 0x0E, 0x40, 0x04, 0x04, 0x00, 0x02, 0x00, 0x0A,
Alexey Frunze57eb0f52016-07-29 22:04:46 -0700346 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x50, 0x0E, 0x00, 0x0B, 0x0E, 0x40,
Vladimir Marko10ef6942015-10-22 15:25:54 +0100347};
Alexey Frunze0cab6562017-07-25 15:19:36 -0700348// 0x00000000: addiu sp, sp, -64
Alexey Frunze73296a72016-06-03 22:51:46 -0700349// 0x00000004: .cfi_def_cfa_offset: 64
Alexey Frunze0cab6562017-07-25 15:19:36 -0700350// 0x00000004: sw ra, +60(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100351// 0x00000008: .cfi_offset: r31 at cfa-4
Alexey Frunze0cab6562017-07-25 15:19:36 -0700352// 0x00000008: sw s1, +56(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100353// 0x0000000c: .cfi_offset: r17 at cfa-8
Alexey Frunze0cab6562017-07-25 15:19:36 -0700354// 0x0000000c: sw s0, +52(sp)
Vladimir Marko10ef6942015-10-22 15:25:54 +0100355// 0x00000010: .cfi_offset: r16 at cfa-12
Alexey Frunze0cab6562017-07-25 15:19:36 -0700356// 0x00000010: sdc1 f22, +40(sp)
357// 0x00000014: sdc1 f20, +32(sp)
358// 0x00000018: bnez a0, 0x0000003c ; +36
359// 0x0000001c: addiu sp, sp, -4
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100360// 0x00000020: .cfi_def_cfa_offset: 68
Alexey Frunze0cab6562017-07-25 15:19:36 -0700361// 0x00000020: sw ra, +0(sp)
362// 0x00000024: nal
363// 0x00000028: lui at, 2
364// 0x0000002c: ori at, at, 24
365// 0x00000030: addu at, at, ra
366// 0x00000034: lw ra, +0(sp)
367// 0x00000038: jr at
368// 0x0000003c: addiu sp, sp, 4
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100369// 0x00000040: .cfi_def_cfa_offset: 64
370// 0x00000040: nop
Vladimir Marko10ef6942015-10-22 15:25:54 +0100371// ...
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100372// 0x00020040: nop
373// 0x00020044: .cfi_remember_state
Alexey Frunze0cab6562017-07-25 15:19:36 -0700374// 0x00020044: lw ra, +60(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100375// 0x00020048: .cfi_restore: r31
Alexey Frunze0cab6562017-07-25 15:19:36 -0700376// 0x00020048: lw s1, +56(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100377// 0x0002004c: .cfi_restore: r17
Alexey Frunze0cab6562017-07-25 15:19:36 -0700378// 0x0002004c: lw s0, +52(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100379// 0x00020050: .cfi_restore: r16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700380// 0x00020050: ldc1 f22, +40(sp)
381// 0x00020054: ldc1 f20, +32(sp)
382// 0x00020058: jr ra
383// 0x0002005c: addiu sp, sp, 64
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100384// 0x00020060: .cfi_def_cfa_offset: 0
385// 0x00020060: .cfi_restore_state
386// 0x00020060: .cfi_def_cfa_offset: 64
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700387
388static constexpr uint8_t expected_asm_kMips64_adjust_head[] = {
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700389 0xC0, 0xFF, 0xBD, 0x67, 0x38, 0x00, 0xBF, 0xFF, 0x30, 0x00, 0xB1, 0xFF,
390 0x28, 0x00, 0xB0, 0xFF, 0x20, 0x00, 0xB9, 0xF7, 0x18, 0x00, 0xB8, 0xF7,
391 0x02, 0x00, 0xA6, 0x60, 0x02, 0x00, 0x3E, 0xEC, 0x0C, 0x00, 0x01, 0xD8,
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700392};
393static constexpr uint8_t expected_asm_kMips64_adjust_tail[] = {
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700394 0x38, 0x00, 0xBF, 0xDF, 0x30, 0x00, 0xB1, 0xDF, 0x28, 0x00, 0xB0, 0xDF,
395 0x20, 0x00, 0xB9, 0xD7, 0x18, 0x00, 0xB8, 0xD7, 0x40, 0x00, 0xBD, 0x67,
396 0x00, 0x00, 0x1F, 0xD8,
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700397};
398static constexpr uint8_t expected_cfi_kMips64_adjust[] = {
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700399 0x44, 0x0E, 0x40, 0x44, 0x9F, 0x02, 0x44, 0x91, 0x04, 0x44, 0x90, 0x06,
400 0x44, 0xB9, 0x08, 0x44, 0xB8, 0x0A, 0x04, 0x10, 0x00, 0x02, 0x00, 0x0A,
401 0x44, 0xDF, 0x44, 0xD1, 0x44, 0xD0, 0x44, 0xF9, 0x44, 0xF8, 0x44, 0x0E,
402 0x00, 0x44, 0x0B, 0x0E, 0x40,
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700403};
Alexey Frunze0cab6562017-07-25 15:19:36 -0700404// 0x00000000: daddiu sp, sp, -64
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700405// 0x00000004: .cfi_def_cfa_offset: 64
Alexey Frunze0cab6562017-07-25 15:19:36 -0700406// 0x00000004: sd ra, +56(sp)
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700407// 0x00000008: .cfi_offset: r31 at cfa-8
Alexey Frunze0cab6562017-07-25 15:19:36 -0700408// 0x00000008: sd s1, +48(sp)
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700409// 0x0000000c: .cfi_offset: r17 at cfa-16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700410// 0x0000000c: sd s0, +40(sp)
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700411// 0x00000010: .cfi_offset: r16 at cfa-24
Alexey Frunze0cab6562017-07-25 15:19:36 -0700412// 0x00000010: sdc1 f25, +32(sp)
David Srbeckyba702002016-02-01 18:15:29 +0000413// 0x00000014: .cfi_offset: r57 at cfa-32
Alexey Frunze0cab6562017-07-25 15:19:36 -0700414// 0x00000014: sdc1 f24, +24(sp)
David Srbeckyba702002016-02-01 18:15:29 +0000415// 0x00000018: .cfi_offset: r56 at cfa-40
Alexey Frunze0cab6562017-07-25 15:19:36 -0700416// 0x00000018: bnec a1, a2, 0x00000024 ; +12
417// 0x0000001c: auipc at, 2
418// 0x00000020: jic at, 12 ; bc 0x00020028 ; +131080
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700419// 0x00000024: nop
Alexey Frunzea0e87b02015-09-24 22:57:20 -0700420// ...
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700421// 0x00020024: nop
422// 0x00020028: .cfi_remember_state
Alexey Frunze0cab6562017-07-25 15:19:36 -0700423// 0x00020028: ld ra, +56(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700424// 0x0002002c: .cfi_restore: r31
Alexey Frunze0cab6562017-07-25 15:19:36 -0700425// 0x0002002c: ld s1, +48(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700426// 0x00020030: .cfi_restore: r17
Alexey Frunze0cab6562017-07-25 15:19:36 -0700427// 0x00020030: ld s0, +40(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700428// 0x00020034: .cfi_restore: r16
Alexey Frunze0cab6562017-07-25 15:19:36 -0700429// 0x00020034: ldc1 f25, +32(sp)
Nicolas Geoffray9989b162016-10-13 13:42:30 +0100430// 0x00020038: .cfi_restore: r57
Alexey Frunze0cab6562017-07-25 15:19:36 -0700431// 0x00020038: ldc1 f24, +24(sp)
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700432// 0x0002003c: .cfi_restore: r56
Alexey Frunze0cab6562017-07-25 15:19:36 -0700433// 0x0002003c: daddiu sp, sp, 64
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700434// 0x00020040: .cfi_def_cfa_offset: 0
Alexey Frunze0cab6562017-07-25 15:19:36 -0700435// 0x00020040: jic ra, 0
Alexey Frunzee104d6e2017-03-21 20:16:05 -0700436// 0x00020044: .cfi_restore_state
437// 0x00020044: .cfi_def_cfa_offset: 64