Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: runtime/vm/assembler_arm_test.cc

Issue 356233003: Satisfy new -Wunused-local-typedefs in gcc 4.8 in the simulators. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/assembler_arm64_test.cc ('k') | runtime/vm/assembler_mips_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_ARM) 6 #if defined(TARGET_ARCH_ARM)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/cpu.h" 9 #include "vm/cpu.h"
10 #include "vm/os.h" 10 #include "vm/os.h"
11 #include "vm/unit_test.h" 11 #include "vm/unit_test.h"
12 #include "vm/virtual_memory.h" 12 #include "vm/virtual_memory.h"
13 13
14 namespace dart { 14 namespace dart {
15 15
16 #define __ assembler-> 16 #define __ assembler->
17 17
18 18
19 ASSEMBLER_TEST_GENERATE(Simple, assembler) { 19 ASSEMBLER_TEST_GENERATE(Simple, assembler) {
20 __ mov(R0, Operand(42)); 20 __ mov(R0, Operand(42));
21 __ bx(LR); 21 __ bx(LR);
22 } 22 }
23 23
24 24
25 ASSEMBLER_TEST_RUN(Simple, test) { 25 ASSEMBLER_TEST_RUN(Simple, test) {
26 typedef int (*SimpleCode)(); 26 typedef int (*SimpleCode)() DART_UNUSED;
27 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 27 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
28 } 28 }
29 29
30 30
31 ASSEMBLER_TEST_GENERATE(MoveNegated, assembler) { 31 ASSEMBLER_TEST_GENERATE(MoveNegated, assembler) {
32 __ mvn(R0, Operand(42)); 32 __ mvn(R0, Operand(42));
33 __ bx(LR); 33 __ bx(LR);
34 } 34 }
35 35
36 36
37 ASSEMBLER_TEST_RUN(MoveNegated, test) { 37 ASSEMBLER_TEST_RUN(MoveNegated, test) {
38 EXPECT(test != NULL); 38 EXPECT(test != NULL);
39 typedef int (*MoveNegated)(); 39 typedef int (*MoveNegated)() DART_UNUSED;
40 EXPECT_EQ(~42, EXECUTE_TEST_CODE_INT32(MoveNegated, test->entry())); 40 EXPECT_EQ(~42, EXECUTE_TEST_CODE_INT32(MoveNegated, test->entry()));
41 } 41 }
42 42
43 43
44 ASSEMBLER_TEST_GENERATE(MoveRotImm, assembler) { 44 ASSEMBLER_TEST_GENERATE(MoveRotImm, assembler) {
45 Operand o; 45 Operand o;
46 EXPECT(Operand::CanHold(0x00550000, &o)); 46 EXPECT(Operand::CanHold(0x00550000, &o));
47 __ mov(R0, o); 47 __ mov(R0, o);
48 EXPECT(Operand::CanHold(0x30000003, &o)); 48 EXPECT(Operand::CanHold(0x30000003, &o));
49 __ add(R0, R0, o); 49 __ add(R0, R0, o);
50 __ bx(LR); 50 __ bx(LR);
51 } 51 }
52 52
53 53
54 ASSEMBLER_TEST_RUN(MoveRotImm, test) { 54 ASSEMBLER_TEST_RUN(MoveRotImm, test) {
55 EXPECT(test != NULL); 55 EXPECT(test != NULL);
56 typedef int (*MoveRotImm)(); 56 typedef int (*MoveRotImm)() DART_UNUSED;
57 EXPECT_EQ(0x30550003, EXECUTE_TEST_CODE_INT32(MoveRotImm, test->entry())); 57 EXPECT_EQ(0x30550003, EXECUTE_TEST_CODE_INT32(MoveRotImm, test->entry()));
58 } 58 }
59 59
60 60
61 ASSEMBLER_TEST_GENERATE(MovImm16, assembler) { 61 ASSEMBLER_TEST_GENERATE(MovImm16, assembler) {
62 #if defined(USING_SIMULATOR) 62 #if defined(USING_SIMULATOR)
63 // ARMv7 is the default. 63 // ARMv7 is the default.
64 HostCPUFeatures::set_arm_version(ARMv6); 64 HostCPUFeatures::set_arm_version(ARMv6);
65 __ LoadDecodableImmediate(R0, 0x12345678 << 1); 65 __ LoadDecodableImmediate(R0, 0x12345678 << 1);
66 HostCPUFeatures::set_arm_version(ARMv7); 66 HostCPUFeatures::set_arm_version(ARMv7);
67 __ LoadDecodableImmediate(R1, 0x12345678); 67 __ LoadDecodableImmediate(R1, 0x12345678);
68 __ sub(R0, R0, Operand(R1)); 68 __ sub(R0, R0, Operand(R1));
69 __ bx(LR); 69 __ bx(LR);
70 #else 70 #else
71 __ LoadDecodableImmediate(R0, 0x12345678); 71 __ LoadDecodableImmediate(R0, 0x12345678);
72 __ bx(LR); 72 __ bx(LR);
73 #endif 73 #endif
74 } 74 }
75 75
76 76
77 ASSEMBLER_TEST_RUN(MovImm16, test) { 77 ASSEMBLER_TEST_RUN(MovImm16, test) {
78 EXPECT(test != NULL); 78 EXPECT(test != NULL);
79 typedef int (*MovImm16)(); 79 typedef int (*MovImm16)() DART_UNUSED;
80 EXPECT_EQ(0x12345678, EXECUTE_TEST_CODE_INT32(MovImm16, test->entry())); 80 EXPECT_EQ(0x12345678, EXECUTE_TEST_CODE_INT32(MovImm16, test->entry()));
81 } 81 }
82 82
83 83
84 ASSEMBLER_TEST_GENERATE(LoadImmediate, assembler) { 84 ASSEMBLER_TEST_GENERATE(LoadImmediate, assembler) {
85 __ mov(R0, Operand(0)); 85 __ mov(R0, Operand(0));
86 __ cmp(R0, Operand(0)); 86 __ cmp(R0, Operand(0));
87 __ LoadImmediate(R0, 0x12345678, EQ); 87 __ LoadImmediate(R0, 0x12345678, EQ);
88 __ LoadImmediate(R0, 0x87654321, NE); 88 __ LoadImmediate(R0, 0x87654321, NE);
89 __ bx(LR); 89 __ bx(LR);
90 } 90 }
91 91
92 92
93 ASSEMBLER_TEST_RUN(LoadImmediate, test) { 93 ASSEMBLER_TEST_RUN(LoadImmediate, test) {
94 EXPECT(test != NULL); 94 EXPECT(test != NULL);
95 typedef int (*LoadImmediate)(); 95 typedef int (*LoadImmediate)() DART_UNUSED;
96 EXPECT_EQ(0x12345678, EXECUTE_TEST_CODE_INT32(LoadImmediate, test->entry())); 96 EXPECT_EQ(0x12345678, EXECUTE_TEST_CODE_INT32(LoadImmediate, test->entry()));
97 } 97 }
98 98
99 99
100 ASSEMBLER_TEST_GENERATE(Vmov, assembler) { 100 ASSEMBLER_TEST_GENERATE(Vmov, assembler) {
101 if (TargetCPUFeatures::vfp_supported()) { 101 if (TargetCPUFeatures::vfp_supported()) {
102 __ mov(R3, Operand(43)); 102 __ mov(R3, Operand(43));
103 __ mov(R1, Operand(41)); 103 __ mov(R1, Operand(41));
104 __ vmovsrr(S1, R1, R3); // S1:S2 = 41:43 104 __ vmovsrr(S1, R1, R3); // S1:S2 = 41:43
105 __ vmovs(S0, S2); // S0 = S2, S0:S1 == 43:41 105 __ vmovs(S0, S2); // S0 = S2, S0:S1 == 43:41
106 __ vmovd(D2, D0); // D2 = D0, S4:S5 == 43:41 106 __ vmovd(D2, D0); // D2 = D0, S4:S5 == 43:41
107 __ vmovrs(R3, S5); // R3 = S5, R3 == 41 107 __ vmovrs(R3, S5); // R3 = S5, R3 == 41
108 __ vmovrrs(R1, R2, S4); // R1:R2 = S4:S5, R1:R2 == 43:41 108 __ vmovrrs(R1, R2, S4); // R1:R2 = S4:S5, R1:R2 == 43:41
109 __ vmovdrr(D3, R3, R2); // D3 = R3:R2, S6:S7 == 41:41 109 __ vmovdrr(D3, R3, R2); // D3 = R3:R2, S6:S7 == 41:41
110 __ vmovsr(S7, R1); // S7 = R1, S6:S7 == 41:43 110 __ vmovsr(S7, R1); // S7 = R1, S6:S7 == 41:43
111 __ vmovrrd(R0, R1, D3); // R0:R1 = D3, R0:R1 == 41:43 111 __ vmovrrd(R0, R1, D3); // R0:R1 = D3, R0:R1 == 41:43
112 __ sub(R0, R1, Operand(R0)); // 43-41 112 __ sub(R0, R1, Operand(R0)); // 43-41
113 } else { 113 } else {
114 __ LoadImmediate(R0, 2); 114 __ LoadImmediate(R0, 2);
115 } 115 }
116 __ bx(LR); 116 __ bx(LR);
117 } 117 }
118 118
119 119
120 ASSEMBLER_TEST_RUN(Vmov, test) { 120 ASSEMBLER_TEST_RUN(Vmov, test) {
121 EXPECT(test != NULL); 121 EXPECT(test != NULL);
122 typedef int (*Vmov)(); 122 typedef int (*Vmov)() DART_UNUSED;
123 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(Vmov, test->entry())); 123 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(Vmov, test->entry()));
124 } 124 }
125 125
126 126
127 ASSEMBLER_TEST_GENERATE(SingleVLoadStore, assembler) { 127 ASSEMBLER_TEST_GENERATE(SingleVLoadStore, assembler) {
128 if (TargetCPUFeatures::vfp_supported()) { 128 if (TargetCPUFeatures::vfp_supported()) {
129 __ LoadImmediate(R0, bit_cast<int32_t, float>(12.3f)); 129 __ LoadImmediate(R0, bit_cast<int32_t, float>(12.3f));
130 __ mov(R2, Operand(SP)); 130 __ mov(R2, Operand(SP));
131 __ str(R0, Address(SP, (-kWordSize * 30), Address::PreIndex)); 131 __ str(R0, Address(SP, (-kWordSize * 30), Address::PreIndex));
132 __ vldrs(S0, Address(R2, (-kWordSize * 30))); 132 __ vldrs(S0, Address(R2, (-kWordSize * 30)));
133 __ vadds(S0, S0, S0); 133 __ vadds(S0, S0, S0);
134 __ vstrs(S0, Address(R2, (-kWordSize * 30))); 134 __ vstrs(S0, Address(R2, (-kWordSize * 30)));
135 __ ldr(R0, Address(SP, (kWordSize * 30), Address::PostIndex)); 135 __ ldr(R0, Address(SP, (kWordSize * 30), Address::PostIndex));
136 } else { 136 } else {
137 __ LoadImmediate(R0, 0); 137 __ LoadImmediate(R0, 0);
138 } 138 }
139 __ bx(LR); 139 __ bx(LR);
140 } 140 }
141 141
142 142
143 ASSEMBLER_TEST_RUN(SingleVLoadStore, test) { 143 ASSEMBLER_TEST_RUN(SingleVLoadStore, test) {
144 EXPECT(test != NULL); 144 EXPECT(test != NULL);
145 if (TargetCPUFeatures::vfp_supported()) { 145 if (TargetCPUFeatures::vfp_supported()) {
146 typedef float (*SingleVLoadStore)(); 146 typedef float (*SingleVLoadStore)() DART_UNUSED;
147 float res = EXECUTE_TEST_CODE_FLOAT(SingleVLoadStore, test->entry()); 147 float res = EXECUTE_TEST_CODE_FLOAT(SingleVLoadStore, test->entry());
148 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f); 148 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f);
149 } else { 149 } else {
150 typedef int (*SingleVLoadStore)(); 150 typedef int (*SingleVLoadStore)() DART_UNUSED;
151 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleVLoadStore, test->entry())); 151 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleVLoadStore, test->entry()));
152 } 152 }
153 } 153 }
154 154
155 155
156 ASSEMBLER_TEST_GENERATE(SingleVShiftLoadStore, assembler) { 156 ASSEMBLER_TEST_GENERATE(SingleVShiftLoadStore, assembler) {
157 if (TargetCPUFeatures::vfp_supported()) { 157 if (TargetCPUFeatures::vfp_supported()) {
158 __ LoadImmediate(R0, bit_cast<int32_t, float>(12.3f)); 158 __ LoadImmediate(R0, bit_cast<int32_t, float>(12.3f));
159 __ mov(R2, Operand(SP)); 159 __ mov(R2, Operand(SP));
160 // Expressing __str(R0, Address(SP, (-kWordSize * 32), Address::PreIndex)); 160 // Expressing __str(R0, Address(SP, (-kWordSize * 32), Address::PreIndex));
161 // as: 161 // as:
162 __ mov(R1, Operand(kWordSize)); 162 __ mov(R1, Operand(kWordSize));
163 __ str(R0, Address(SP, R1, LSL, 5, Address::NegPreIndex)); 163 __ str(R0, Address(SP, R1, LSL, 5, Address::NegPreIndex));
164 __ vldrs(S0, Address(R2, (-kWordSize * 32))); 164 __ vldrs(S0, Address(R2, (-kWordSize * 32)));
165 __ vadds(S0, S0, S0); 165 __ vadds(S0, S0, S0);
166 __ vstrs(S0, Address(R2, (-kWordSize * 32))); 166 __ vstrs(S0, Address(R2, (-kWordSize * 32)));
167 // Expressing __ldr(R0, Address(SP, (kWordSize * 32), Address::PostIndex)); 167 // Expressing __ldr(R0, Address(SP, (kWordSize * 32), Address::PostIndex));
168 // as: 168 // as:
169 __ ldr(R0, Address(SP, R1, LSL, 5, Address::PostIndex)); 169 __ ldr(R0, Address(SP, R1, LSL, 5, Address::PostIndex));
170 } else { 170 } else {
171 __ LoadImmediate(R0, 0); 171 __ LoadImmediate(R0, 0);
172 } 172 }
173 __ bx(LR); 173 __ bx(LR);
174 } 174 }
175 175
176 176
177 ASSEMBLER_TEST_RUN(SingleVShiftLoadStore, test) { 177 ASSEMBLER_TEST_RUN(SingleVShiftLoadStore, test) {
178 EXPECT(test != NULL); 178 EXPECT(test != NULL);
179 if (TargetCPUFeatures::vfp_supported()) { 179 if (TargetCPUFeatures::vfp_supported()) {
180 typedef float (*SingleVLoadStore)(); 180 typedef float (*SingleVLoadStore)() DART_UNUSED;
181 float res = EXECUTE_TEST_CODE_FLOAT(SingleVLoadStore, test->entry()); 181 float res = EXECUTE_TEST_CODE_FLOAT(SingleVLoadStore, test->entry());
182 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f); 182 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f);
183 } else { 183 } else {
184 typedef int (*SingleVLoadStore)(); 184 typedef int (*SingleVLoadStore)() DART_UNUSED;
185 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleVLoadStore, test->entry())); 185 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleVLoadStore, test->entry()));
186 } 186 }
187 } 187 }
188 188
189 189
190 ASSEMBLER_TEST_GENERATE(DoubleVLoadStore, assembler) { 190 ASSEMBLER_TEST_GENERATE(DoubleVLoadStore, assembler) {
191 if (TargetCPUFeatures::vfp_supported()) { 191 if (TargetCPUFeatures::vfp_supported()) {
192 int64_t value = bit_cast<int64_t, double>(12.3); 192 int64_t value = bit_cast<int64_t, double>(12.3);
193 __ LoadImmediate(R0, Utils::Low32Bits(value)); 193 __ LoadImmediate(R0, Utils::Low32Bits(value));
194 __ LoadImmediate(R1, Utils::High32Bits(value)); 194 __ LoadImmediate(R1, Utils::High32Bits(value));
195 __ mov(R2, Operand(SP)); 195 __ mov(R2, Operand(SP));
196 __ str(R0, Address(SP, (-kWordSize * 30), Address::PreIndex)); 196 __ str(R0, Address(SP, (-kWordSize * 30), Address::PreIndex));
197 __ str(R1, Address(R2, (-kWordSize * 29))); 197 __ str(R1, Address(R2, (-kWordSize * 29)));
198 __ vldrd(D0, Address(R2, (-kWordSize * 30))); 198 __ vldrd(D0, Address(R2, (-kWordSize * 30)));
199 __ vaddd(D0, D0, D0); 199 __ vaddd(D0, D0, D0);
200 __ vstrd(D0, Address(R2, (-kWordSize * 30))); 200 __ vstrd(D0, Address(R2, (-kWordSize * 30)));
201 __ ldr(R1, Address(R2, (-kWordSize * 29))); 201 __ ldr(R1, Address(R2, (-kWordSize * 29)));
202 __ ldr(R0, Address(SP, (kWordSize * 30), Address::PostIndex)); 202 __ ldr(R0, Address(SP, (kWordSize * 30), Address::PostIndex));
203 } else { 203 } else {
204 __ LoadImmediate(R0, 0); 204 __ LoadImmediate(R0, 0);
205 } 205 }
206 __ bx(LR); 206 __ bx(LR);
207 } 207 }
208 208
209 209
210 ASSEMBLER_TEST_RUN(DoubleVLoadStore, test) { 210 ASSEMBLER_TEST_RUN(DoubleVLoadStore, test) {
211 EXPECT(test != NULL); 211 EXPECT(test != NULL);
212 if (TargetCPUFeatures::vfp_supported()) { 212 if (TargetCPUFeatures::vfp_supported()) {
213 typedef double (*DoubleVLoadStore)(); 213 typedef double (*DoubleVLoadStore)() DART_UNUSED;
214 float res = EXECUTE_TEST_CODE_DOUBLE(DoubleVLoadStore, test->entry()); 214 float res = EXECUTE_TEST_CODE_DOUBLE(DoubleVLoadStore, test->entry());
215 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f); 215 EXPECT_FLOAT_EQ(2*12.3f, res, 0.001f);
216 } else { 216 } else {
217 typedef int (*DoubleVLoadStore)(); 217 typedef int (*DoubleVLoadStore)() DART_UNUSED;
218 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleVLoadStore, test->entry())); 218 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleVLoadStore, test->entry()));
219 } 219 }
220 } 220 }
221 221
222 222
223 ASSEMBLER_TEST_GENERATE(SingleFPOperations, assembler) { 223 ASSEMBLER_TEST_GENERATE(SingleFPOperations, assembler) {
224 if (TargetCPUFeatures::vfp_supported()) { 224 if (TargetCPUFeatures::vfp_supported()) {
225 __ LoadSImmediate(S0, 12.3f); 225 __ LoadSImmediate(S0, 12.3f);
226 __ LoadSImmediate(S1, 3.4f); 226 __ LoadSImmediate(S1, 3.4f);
227 __ vnegs(S0, S0); // -12.3f 227 __ vnegs(S0, S0); // -12.3f
228 __ vabss(S0, S0); // 12.3f 228 __ vabss(S0, S0); // 12.3f
229 __ vadds(S0, S0, S1); // 15.7f 229 __ vadds(S0, S0, S1); // 15.7f
230 __ vmuls(S0, S0, S1); // 53.38f 230 __ vmuls(S0, S0, S1); // 53.38f
231 __ vsubs(S0, S0, S1); // 49.98f 231 __ vsubs(S0, S0, S1); // 49.98f
232 __ vdivs(S0, S0, S1); // 14.7f 232 __ vdivs(S0, S0, S1); // 14.7f
233 __ vsqrts(S0, S0); // 3.8340579f 233 __ vsqrts(S0, S0); // 3.8340579f
234 } else { 234 } else {
235 __ LoadImmediate(R0, 0); 235 __ LoadImmediate(R0, 0);
236 } 236 }
237 __ bx(LR); 237 __ bx(LR);
238 } 238 }
239 239
240 240
241 ASSEMBLER_TEST_RUN(SingleFPOperations, test) { 241 ASSEMBLER_TEST_RUN(SingleFPOperations, test) {
242 EXPECT(test != NULL); 242 EXPECT(test != NULL);
243 if (TargetCPUFeatures::vfp_supported()) { 243 if (TargetCPUFeatures::vfp_supported()) {
244 typedef float (*SingleFPOperations)(); 244 typedef float (*SingleFPOperations)() DART_UNUSED;
245 float res = EXECUTE_TEST_CODE_FLOAT(SingleFPOperations, test->entry()); 245 float res = EXECUTE_TEST_CODE_FLOAT(SingleFPOperations, test->entry());
246 EXPECT_FLOAT_EQ(3.8340579f, res, 0.001f); 246 EXPECT_FLOAT_EQ(3.8340579f, res, 0.001f);
247 } else { 247 } else {
248 typedef int (*SingleFPOperations)(); 248 typedef int (*SingleFPOperations)() DART_UNUSED;
249 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleFPOperations, test->entry())); 249 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SingleFPOperations, test->entry()));
250 } 250 }
251 } 251 }
252 252
253 253
254 ASSEMBLER_TEST_GENERATE(DoubleFPOperations, assembler) { 254 ASSEMBLER_TEST_GENERATE(DoubleFPOperations, assembler) {
255 if (TargetCPUFeatures::vfp_supported()) { 255 if (TargetCPUFeatures::vfp_supported()) {
256 __ LoadDImmediate(D0, 12.3, R0); 256 __ LoadDImmediate(D0, 12.3, R0);
257 __ LoadDImmediate(D1, 3.4, R0); 257 __ LoadDImmediate(D1, 3.4, R0);
258 __ vnegd(D0, D0); // -12.3 258 __ vnegd(D0, D0); // -12.3
259 __ vabsd(D0, D0); // 12.3 259 __ vabsd(D0, D0); // 12.3
260 __ vaddd(D0, D0, D1); // 15.7 260 __ vaddd(D0, D0, D1); // 15.7
261 __ vmuld(D0, D0, D1); // 53.38 261 __ vmuld(D0, D0, D1); // 53.38
262 __ vsubd(D0, D0, D1); // 49.98 262 __ vsubd(D0, D0, D1); // 49.98
263 __ vdivd(D0, D0, D1); // 14.7 263 __ vdivd(D0, D0, D1); // 14.7
264 __ vsqrtd(D0, D0); // 3.8340579 264 __ vsqrtd(D0, D0); // 3.8340579
265 } else { 265 } else {
266 __ LoadImmediate(R0, 0); 266 __ LoadImmediate(R0, 0);
267 } 267 }
268 __ bx(LR); 268 __ bx(LR);
269 } 269 }
270 270
271 271
272 ASSEMBLER_TEST_RUN(DoubleFPOperations, test) { 272 ASSEMBLER_TEST_RUN(DoubleFPOperations, test) {
273 EXPECT(test != NULL); 273 EXPECT(test != NULL);
274 if (TargetCPUFeatures::vfp_supported()) { 274 if (TargetCPUFeatures::vfp_supported()) {
275 typedef double (*DoubleFPOperations)(); 275 typedef double (*DoubleFPOperations)() DART_UNUSED;
276 double res = EXECUTE_TEST_CODE_DOUBLE(DoubleFPOperations, test->entry()); 276 double res = EXECUTE_TEST_CODE_DOUBLE(DoubleFPOperations, test->entry());
277 EXPECT_FLOAT_EQ(3.8340579, res, 0.001); 277 EXPECT_FLOAT_EQ(3.8340579, res, 0.001);
278 } else { 278 } else {
279 typedef int (*DoubleFPOperations)(); 279 typedef int (*DoubleFPOperations)() DART_UNUSED;
280 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleFPOperations, test->entry())); 280 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleFPOperations, test->entry()));
281 } 281 }
282 } 282 }
283 283
284 284
285 ASSEMBLER_TEST_GENERATE(DoubleSqrtNeg, assembler) { 285 ASSEMBLER_TEST_GENERATE(DoubleSqrtNeg, assembler) {
286 if (TargetCPUFeatures::vfp_supported()) { 286 if (TargetCPUFeatures::vfp_supported()) {
287 // Check that sqrt of a negative double gives NaN. 287 // Check that sqrt of a negative double gives NaN.
288 __ LoadDImmediate(D1, -1.0, R0); 288 __ LoadDImmediate(D1, -1.0, R0);
289 __ vsqrtd(D0, D1); 289 __ vsqrtd(D0, D1);
290 __ vcmpd(D0, D0); 290 __ vcmpd(D0, D0);
291 __ vmstat(); 291 __ vmstat();
292 __ mov(R0, Operand(1), VS); 292 __ mov(R0, Operand(1), VS);
293 __ mov(R0, Operand(0), VC); 293 __ mov(R0, Operand(0), VC);
294 } else { 294 } else {
295 __ LoadImmediate(R0, 1); 295 __ LoadImmediate(R0, 1);
296 } 296 }
297 __ Ret(); 297 __ Ret();
298 } 298 }
299 299
300 300
301 ASSEMBLER_TEST_RUN(DoubleSqrtNeg, test) { 301 ASSEMBLER_TEST_RUN(DoubleSqrtNeg, test) {
302 EXPECT(test != NULL); 302 EXPECT(test != NULL);
303 typedef int (*DoubleSqrtNeg)(); 303 typedef int (*DoubleSqrtNeg)() DART_UNUSED;
304 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(DoubleSqrtNeg, test->entry())); 304 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(DoubleSqrtNeg, test->entry()));
305 } 305 }
306 306
307 307
308 ASSEMBLER_TEST_GENERATE(IntToDoubleConversion, assembler) { 308 ASSEMBLER_TEST_GENERATE(IntToDoubleConversion, assembler) {
309 if (TargetCPUFeatures::vfp_supported()) { 309 if (TargetCPUFeatures::vfp_supported()) {
310 __ mov(R3, Operand(6)); 310 __ mov(R3, Operand(6));
311 __ vmovsr(S3, R3); 311 __ vmovsr(S3, R3);
312 __ vcvtdi(D0, S3); 312 __ vcvtdi(D0, S3);
313 } else { 313 } else {
314 __ LoadImmediate(R0, 0); 314 __ LoadImmediate(R0, 0);
315 } 315 }
316 __ bx(LR); 316 __ bx(LR);
317 } 317 }
318 318
319 319
320 ASSEMBLER_TEST_RUN(IntToDoubleConversion, test) { 320 ASSEMBLER_TEST_RUN(IntToDoubleConversion, test) {
321 EXPECT(test != NULL); 321 EXPECT(test != NULL);
322 if (TargetCPUFeatures::vfp_supported()) { 322 if (TargetCPUFeatures::vfp_supported()) {
323 typedef double (*IntToDoubleConversionCode)(); 323 typedef double (*IntToDoubleConversionCode)() DART_UNUSED;
324 double res = EXECUTE_TEST_CODE_DOUBLE(IntToDoubleConversionCode, 324 double res = EXECUTE_TEST_CODE_DOUBLE(IntToDoubleConversionCode,
325 test->entry()); 325 test->entry());
326 EXPECT_FLOAT_EQ(6.0, res, 0.001); 326 EXPECT_FLOAT_EQ(6.0, res, 0.001);
327 } else { 327 } else {
328 typedef int (*IntToDoubleConversionCode)(); 328 typedef int (*IntToDoubleConversionCode)() DART_UNUSED;
329 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(IntToDoubleConversionCode, 329 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(IntToDoubleConversionCode,
330 test->entry())); 330 test->entry()));
331 } 331 }
332 } 332 }
333 333
334 334
335 ASSEMBLER_TEST_GENERATE(LongToDoubleConversion, assembler) { 335 ASSEMBLER_TEST_GENERATE(LongToDoubleConversion, assembler) {
336 if (TargetCPUFeatures::vfp_supported()) { 336 if (TargetCPUFeatures::vfp_supported()) {
337 int64_t value = 60000000000LL; 337 int64_t value = 60000000000LL;
338 __ LoadImmediate(R0, Utils::Low32Bits(value)); 338 __ LoadImmediate(R0, Utils::Low32Bits(value));
339 __ LoadImmediate(R1, Utils::High32Bits(value)); 339 __ LoadImmediate(R1, Utils::High32Bits(value));
340 __ vmovsr(S0, R0); 340 __ vmovsr(S0, R0);
341 __ vmovsr(S2, R1); 341 __ vmovsr(S2, R1);
342 __ vcvtdu(D0, S0); 342 __ vcvtdu(D0, S0);
343 __ vcvtdi(D1, S2); 343 __ vcvtdi(D1, S2);
344 __ LoadDImmediate(D2, 1.0 * (1LL << 32), R0); 344 __ LoadDImmediate(D2, 1.0 * (1LL << 32), R0);
345 __ vmlad(D0, D1, D2); 345 __ vmlad(D0, D1, D2);
346 } else { 346 } else {
347 __ LoadImmediate(R0, 0); 347 __ LoadImmediate(R0, 0);
348 } 348 }
349 __ bx(LR); 349 __ bx(LR);
350 } 350 }
351 351
352 352
353 ASSEMBLER_TEST_RUN(LongToDoubleConversion, test) { 353 ASSEMBLER_TEST_RUN(LongToDoubleConversion, test) {
354 EXPECT(test != NULL); 354 EXPECT(test != NULL);
355 if (TargetCPUFeatures::vfp_supported()) { 355 if (TargetCPUFeatures::vfp_supported()) {
356 typedef double (*LongToDoubleConversionCode)(); 356 typedef double (*LongToDoubleConversionCode)() DART_UNUSED;
357 double res = EXECUTE_TEST_CODE_DOUBLE(LongToDoubleConversionCode, 357 double res = EXECUTE_TEST_CODE_DOUBLE(LongToDoubleConversionCode,
358 test->entry()); 358 test->entry());
359 EXPECT_FLOAT_EQ(60000000000.0, res, 0.001); 359 EXPECT_FLOAT_EQ(60000000000.0, res, 0.001);
360 } else { 360 } else {
361 typedef int (*LongToDoubleConversionCode)(); 361 typedef int (*LongToDoubleConversionCode)() DART_UNUSED;
362 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(LongToDoubleConversionCode, 362 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(LongToDoubleConversionCode,
363 test->entry())); 363 test->entry()));
364 } 364 }
365 } 365 }
366 366
367 367
368 ASSEMBLER_TEST_GENERATE(IntToFloatConversion, assembler) { 368 ASSEMBLER_TEST_GENERATE(IntToFloatConversion, assembler) {
369 if (TargetCPUFeatures::vfp_supported()) { 369 if (TargetCPUFeatures::vfp_supported()) {
370 __ mov(R3, Operand(6)); 370 __ mov(R3, Operand(6));
371 __ vmovsr(S3, R3); 371 __ vmovsr(S3, R3);
372 __ vcvtsi(S0, S3); 372 __ vcvtsi(S0, S3);
373 } else { 373 } else {
374 __ LoadImmediate(R0, 0); 374 __ LoadImmediate(R0, 0);
375 } 375 }
376 __ bx(LR); 376 __ bx(LR);
377 } 377 }
378 378
379 379
380 ASSEMBLER_TEST_RUN(IntToFloatConversion, test) { 380 ASSEMBLER_TEST_RUN(IntToFloatConversion, test) {
381 EXPECT(test != NULL); 381 EXPECT(test != NULL);
382 if (TargetCPUFeatures::vfp_supported()) { 382 if (TargetCPUFeatures::vfp_supported()) {
383 typedef float (*IntToFloatConversionCode)(); 383 typedef float (*IntToFloatConversionCode)() DART_UNUSED;
384 float res = EXECUTE_TEST_CODE_FLOAT(IntToFloatConversionCode, 384 float res = EXECUTE_TEST_CODE_FLOAT(IntToFloatConversionCode,
385 test->entry()); 385 test->entry());
386 EXPECT_FLOAT_EQ(6.0, res, 0.001); 386 EXPECT_FLOAT_EQ(6.0, res, 0.001);
387 } else { 387 } else {
388 typedef int (*IntToFloatConversionCode)(); 388 typedef int (*IntToFloatConversionCode)() DART_UNUSED;
389 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(IntToFloatConversionCode, 389 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(IntToFloatConversionCode,
390 test->entry())); 390 test->entry()));
391 } 391 }
392 } 392 }
393 393
394 394
395 ASSEMBLER_TEST_GENERATE(FloatToIntConversion, assembler) { 395 ASSEMBLER_TEST_GENERATE(FloatToIntConversion, assembler) {
396 if (TargetCPUFeatures::vfp_supported()) { 396 if (TargetCPUFeatures::vfp_supported()) {
397 __ vcvtis(S1, S0); 397 __ vcvtis(S1, S0);
398 __ vmovrs(R0, S1); 398 __ vmovrs(R0, S1);
399 } else { 399 } else {
400 __ LoadImmediate(R0, 0); 400 __ LoadImmediate(R0, 0);
401 } 401 }
402 __ bx(LR); 402 __ bx(LR);
403 } 403 }
404 404
405 405
406 ASSEMBLER_TEST_RUN(FloatToIntConversion, test) { 406 ASSEMBLER_TEST_RUN(FloatToIntConversion, test) {
407 EXPECT(test != NULL); 407 EXPECT(test != NULL);
408 if (TargetCPUFeatures::vfp_supported()) { 408 if (TargetCPUFeatures::vfp_supported()) {
409 typedef int (*FloatToIntConversion)(float arg); 409 typedef int (*FloatToIntConversion)(float arg) DART_UNUSED;
410 EXPECT_EQ(12, 410 EXPECT_EQ(12,
411 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(), 411 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(),
412 12.8f)); 412 12.8f));
413 EXPECT_EQ(INT_MIN, 413 EXPECT_EQ(INT_MIN,
414 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(), 414 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(),
415 -FLT_MAX)); 415 -FLT_MAX));
416 EXPECT_EQ(INT_MAX, 416 EXPECT_EQ(INT_MAX,
417 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(), 417 EXECUTE_TEST_CODE_INT32_F(FloatToIntConversion, test->entry(),
418 FLT_MAX)); 418 FLT_MAX));
419 } else { 419 } else {
420 typedef int (*FloatToIntConversion)(); 420 typedef int (*FloatToIntConversion)() DART_UNUSED;
421 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(FloatToIntConversion, test->entry())); 421 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(FloatToIntConversion, test->entry()));
422 } 422 }
423 } 423 }
424 424
425 425
426 ASSEMBLER_TEST_GENERATE(DoubleToIntConversion, assembler) { 426 ASSEMBLER_TEST_GENERATE(DoubleToIntConversion, assembler) {
427 if (TargetCPUFeatures::vfp_supported()) { 427 if (TargetCPUFeatures::vfp_supported()) {
428 __ vcvtid(S0, D0); 428 __ vcvtid(S0, D0);
429 __ vmovrs(R0, S0); 429 __ vmovrs(R0, S0);
430 } else { 430 } else {
431 __ LoadImmediate(R0, 0); 431 __ LoadImmediate(R0, 0);
432 } 432 }
433 __ bx(LR); 433 __ bx(LR);
434 } 434 }
435 435
436 436
437 ASSEMBLER_TEST_RUN(DoubleToIntConversion, test) { 437 ASSEMBLER_TEST_RUN(DoubleToIntConversion, test) {
438 if (TargetCPUFeatures::vfp_supported()) { 438 if (TargetCPUFeatures::vfp_supported()) {
439 typedef int (*DoubleToIntConversion)(double arg); 439 typedef int (*DoubleToIntConversion)(double arg) DART_UNUSED;
440 EXPECT(test != NULL); 440 EXPECT(test != NULL);
441 EXPECT_EQ(12, 441 EXPECT_EQ(12,
442 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(), 442 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(),
443 12.8)); 443 12.8));
444 EXPECT_EQ(INT_MIN, 444 EXPECT_EQ(INT_MIN,
445 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(), 445 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(),
446 -DBL_MAX)); 446 -DBL_MAX));
447 EXPECT_EQ(INT_MAX, 447 EXPECT_EQ(INT_MAX,
448 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(), 448 EXECUTE_TEST_CODE_INT32_D(DoubleToIntConversion, test->entry(),
449 DBL_MAX)); 449 DBL_MAX));
450 } else { 450 } else {
451 typedef int (*DoubleToIntConversion)(); 451 typedef int (*DoubleToIntConversion)() DART_UNUSED;
452 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleToIntConversion, test->entry())); 452 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleToIntConversion, test->entry()));
453 } 453 }
454 } 454 }
455 455
456 456
457 ASSEMBLER_TEST_GENERATE(FloatToDoubleConversion, assembler) { 457 ASSEMBLER_TEST_GENERATE(FloatToDoubleConversion, assembler) {
458 __ LoadSImmediate(S2, 12.8f); 458 __ LoadSImmediate(S2, 12.8f);
459 __ vcvtds(D0, S2); 459 __ vcvtds(D0, S2);
460 __ bx(LR); 460 __ bx(LR);
461 } 461 }
462 462
463 463
464 ASSEMBLER_TEST_RUN(FloatToDoubleConversion, test) { 464 ASSEMBLER_TEST_RUN(FloatToDoubleConversion, test) {
465 typedef double (*FloatToDoubleConversionCode)(); 465 typedef double (*FloatToDoubleConversionCode)() DART_UNUSED;
466 EXPECT(test != NULL); 466 EXPECT(test != NULL);
467 double res = EXECUTE_TEST_CODE_DOUBLE(FloatToDoubleConversionCode, 467 double res = EXECUTE_TEST_CODE_DOUBLE(FloatToDoubleConversionCode,
468 test->entry()); 468 test->entry());
469 EXPECT_FLOAT_EQ(12.8, res, 0.001); 469 EXPECT_FLOAT_EQ(12.8, res, 0.001);
470 } 470 }
471 471
472 472
473 ASSEMBLER_TEST_GENERATE(DoubleToFloatConversion, assembler) { 473 ASSEMBLER_TEST_GENERATE(DoubleToFloatConversion, assembler) {
474 if (TargetCPUFeatures::vfp_supported()) { 474 if (TargetCPUFeatures::vfp_supported()) {
475 __ LoadDImmediate(D1, 12.8, R0); 475 __ LoadDImmediate(D1, 12.8, R0);
476 __ vcvtsd(S0, D1); 476 __ vcvtsd(S0, D1);
477 } else { 477 } else {
478 __ LoadImmediate(R0, 0); 478 __ LoadImmediate(R0, 0);
479 } 479 }
480 __ bx(LR); 480 __ bx(LR);
481 } 481 }
482 482
483 483
484 ASSEMBLER_TEST_RUN(DoubleToFloatConversion, test) { 484 ASSEMBLER_TEST_RUN(DoubleToFloatConversion, test) {
485 EXPECT(test != NULL); 485 EXPECT(test != NULL);
486 if (TargetCPUFeatures::vfp_supported()) { 486 if (TargetCPUFeatures::vfp_supported()) {
487 typedef float (*DoubleToFloatConversionCode)(); 487 typedef float (*DoubleToFloatConversionCode)() DART_UNUSED;
488 float res = EXECUTE_TEST_CODE_FLOAT(DoubleToFloatConversionCode, 488 float res = EXECUTE_TEST_CODE_FLOAT(DoubleToFloatConversionCode,
489 test->entry()); 489 test->entry());
490 EXPECT_FLOAT_EQ(12.8, res, 0.001); 490 EXPECT_FLOAT_EQ(12.8, res, 0.001);
491 } else { 491 } else {
492 typedef int (*DoubleToFloatConversionCode)(); 492 typedef int (*DoubleToFloatConversionCode)() DART_UNUSED;
493 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleToFloatConversionCode, 493 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleToFloatConversionCode,
494 test->entry())); 494 test->entry()));
495 } 495 }
496 } 496 }
497 497
498 498
499 ASSEMBLER_TEST_GENERATE(FloatCompare, assembler) { 499 ASSEMBLER_TEST_GENERATE(FloatCompare, assembler) {
500 if (TargetCPUFeatures::vfp_supported()) { 500 if (TargetCPUFeatures::vfp_supported()) {
501 // Test 12.3f vs 12.5f. 501 // Test 12.3f vs 12.5f.
502 __ LoadSImmediate(S0, 12.3f); 502 __ LoadSImmediate(S0, 12.3f);
(...skipping 19 matching lines...) Expand all
522 } else { 522 } else {
523 __ LoadImmediate(R0, 0); 523 __ LoadImmediate(R0, 0);
524 } 524 }
525 // R0 is 0 if all tests passed. 525 // R0 is 0 if all tests passed.
526 __ bx(LR); 526 __ bx(LR);
527 } 527 }
528 528
529 529
530 ASSEMBLER_TEST_RUN(FloatCompare, test) { 530 ASSEMBLER_TEST_RUN(FloatCompare, test) {
531 EXPECT(test != NULL); 531 EXPECT(test != NULL);
532 typedef int (*FloatCompare)(); 532 typedef int (*FloatCompare)() DART_UNUSED;
533 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(FloatCompare, test->entry())); 533 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(FloatCompare, test->entry()));
534 } 534 }
535 535
536 536
537 ASSEMBLER_TEST_GENERATE(DoubleCompare, assembler) { 537 ASSEMBLER_TEST_GENERATE(DoubleCompare, assembler) {
538 if (TargetCPUFeatures::vfp_supported()) { 538 if (TargetCPUFeatures::vfp_supported()) {
539 // Test 12.3 vs 12.5. 539 // Test 12.3 vs 12.5.
540 __ LoadDImmediate(D0, 12.3, R1); 540 __ LoadDImmediate(D0, 12.3, R1);
541 __ LoadDImmediate(D1, 12.5, R1); 541 __ LoadDImmediate(D1, 12.5, R1);
542 542
(...skipping 17 matching lines...) Expand all
560 } else { 560 } else {
561 __ LoadImmediate(R0, 0); 561 __ LoadImmediate(R0, 0);
562 } 562 }
563 // R0 is 0 if all tests passed. 563 // R0 is 0 if all tests passed.
564 __ bx(LR); 564 __ bx(LR);
565 } 565 }
566 566
567 567
568 ASSEMBLER_TEST_RUN(DoubleCompare, test) { 568 ASSEMBLER_TEST_RUN(DoubleCompare, test) {
569 EXPECT(test != NULL); 569 EXPECT(test != NULL);
570 typedef int (*DoubleCompare)(); 570 typedef int (*DoubleCompare)() DART_UNUSED;
571 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleCompare, test->entry())); 571 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(DoubleCompare, test->entry()));
572 } 572 }
573 573
574 574
575 ASSEMBLER_TEST_GENERATE(Loop, assembler) { 575 ASSEMBLER_TEST_GENERATE(Loop, assembler) {
576 Label loop_entry; 576 Label loop_entry;
577 __ mov(R0, Operand(1)); 577 __ mov(R0, Operand(1));
578 __ mov(R1, Operand(2)); 578 __ mov(R1, Operand(2));
579 __ Bind(&loop_entry); 579 __ Bind(&loop_entry);
580 __ mov(R0, Operand(R0, LSL, 1)); 580 __ mov(R0, Operand(R0, LSL, 1));
581 __ movs(R1, Operand(R1, LSR, 1)); 581 __ movs(R1, Operand(R1, LSR, 1));
582 __ b(&loop_entry, NE); 582 __ b(&loop_entry, NE);
583 __ bx(LR); 583 __ bx(LR);
584 } 584 }
585 585
586 586
587 ASSEMBLER_TEST_RUN(Loop, test) { 587 ASSEMBLER_TEST_RUN(Loop, test) {
588 EXPECT(test != NULL); 588 EXPECT(test != NULL);
589 typedef int (*Loop)(); 589 typedef int (*Loop)() DART_UNUSED;
590 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry())); 590 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry()));
591 } 591 }
592 592
593 593
594 ASSEMBLER_TEST_GENERATE(ForwardBranch, assembler) { 594 ASSEMBLER_TEST_GENERATE(ForwardBranch, assembler) {
595 Label skip; 595 Label skip;
596 __ mov(R0, Operand(42)); 596 __ mov(R0, Operand(42));
597 __ b(&skip); 597 __ b(&skip);
598 __ mov(R0, Operand(11)); 598 __ mov(R0, Operand(11));
599 __ Bind(&skip); 599 __ Bind(&skip);
600 __ bx(LR); 600 __ bx(LR);
601 } 601 }
602 602
603 603
604 ASSEMBLER_TEST_RUN(ForwardBranch, test) { 604 ASSEMBLER_TEST_RUN(ForwardBranch, test) {
605 EXPECT(test != NULL); 605 EXPECT(test != NULL);
606 typedef int (*ForwardBranch)(); 606 typedef int (*ForwardBranch)() DART_UNUSED;
607 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(ForwardBranch, test->entry())); 607 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(ForwardBranch, test->entry()));
608 } 608 }
609 609
610 610
611 ASSEMBLER_TEST_GENERATE(Loop2, assembler) { 611 ASSEMBLER_TEST_GENERATE(Loop2, assembler) {
612 Label loop_entry; 612 Label loop_entry;
613 __ set_use_far_branches(true); 613 __ set_use_far_branches(true);
614 __ mov(R0, Operand(1)); 614 __ mov(R0, Operand(1));
615 __ mov(R1, Operand(2)); 615 __ mov(R1, Operand(2));
616 __ Bind(&loop_entry); 616 __ Bind(&loop_entry);
617 __ mov(R0, Operand(R0, LSL, 1)); 617 __ mov(R0, Operand(R0, LSL, 1));
618 __ movs(R1, Operand(R1, LSR, 1)); 618 __ movs(R1, Operand(R1, LSR, 1));
619 __ b(&loop_entry, NE); 619 __ b(&loop_entry, NE);
620 __ bx(LR); 620 __ bx(LR);
621 } 621 }
622 622
623 623
624 ASSEMBLER_TEST_RUN(Loop2, test) { 624 ASSEMBLER_TEST_RUN(Loop2, test) {
625 EXPECT(test != NULL); 625 EXPECT(test != NULL);
626 typedef int (*Loop)(); 626 typedef int (*Loop)() DART_UNUSED;
627 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry())); 627 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry()));
628 } 628 }
629 629
630 630
631 ASSEMBLER_TEST_GENERATE(Loop3, assembler) { 631 ASSEMBLER_TEST_GENERATE(Loop3, assembler) {
632 Label loop_entry; 632 Label loop_entry;
633 __ set_use_far_branches(true); 633 __ set_use_far_branches(true);
634 __ mov(R0, Operand(1)); 634 __ mov(R0, Operand(1));
635 __ mov(R1, Operand(2)); 635 __ mov(R1, Operand(2));
636 __ Bind(&loop_entry); 636 __ Bind(&loop_entry);
637 for (int i = 0; i < (1 << 22); i++) { 637 for (int i = 0; i < (1 << 22); i++) {
638 __ nop(); 638 __ nop();
639 } 639 }
640 __ mov(R0, Operand(R0, LSL, 1)); 640 __ mov(R0, Operand(R0, LSL, 1));
641 __ movs(R1, Operand(R1, LSR, 1)); 641 __ movs(R1, Operand(R1, LSR, 1));
642 __ b(&loop_entry, NE); 642 __ b(&loop_entry, NE);
643 __ bx(LR); 643 __ bx(LR);
644 } 644 }
645 645
646 646
647 ASSEMBLER_TEST_RUN(Loop3, test) { 647 ASSEMBLER_TEST_RUN(Loop3, test) {
648 EXPECT(test != NULL); 648 EXPECT(test != NULL);
649 typedef int (*Loop)(); 649 typedef int (*Loop)() DART_UNUSED;
650 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry())); 650 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry()));
651 } 651 }
652 652
653 653
654 ASSEMBLER_TEST_GENERATE(LoadStore, assembler) { 654 ASSEMBLER_TEST_GENERATE(LoadStore, assembler) {
655 __ mov(R1, Operand(123)); 655 __ mov(R1, Operand(123));
656 __ Push(R1); 656 __ Push(R1);
657 __ Pop(R0); 657 __ Pop(R0);
658 __ bx(LR); 658 __ bx(LR);
659 } 659 }
660 660
661 661
662 ASSEMBLER_TEST_RUN(LoadStore, test) { 662 ASSEMBLER_TEST_RUN(LoadStore, test) {
663 EXPECT(test != NULL); 663 EXPECT(test != NULL);
664 typedef int (*LoadStore)(); 664 typedef int (*LoadStore)() DART_UNUSED;
665 EXPECT_EQ(123, EXECUTE_TEST_CODE_INT32(LoadStore, test->entry())); 665 EXPECT_EQ(123, EXECUTE_TEST_CODE_INT32(LoadStore, test->entry()));
666 } 666 }
667 667
668 668
669 ASSEMBLER_TEST_GENERATE(AddSub, assembler) { 669 ASSEMBLER_TEST_GENERATE(AddSub, assembler) {
670 __ mov(R1, Operand(40)); 670 __ mov(R1, Operand(40));
671 __ sub(R1, R1, Operand(2)); 671 __ sub(R1, R1, Operand(2));
672 __ add(R0, R1, Operand(4)); 672 __ add(R0, R1, Operand(4));
673 __ rsbs(R0, R0, Operand(100)); 673 __ rsbs(R0, R0, Operand(100));
674 __ rsc(R0, R0, Operand(100)); 674 __ rsc(R0, R0, Operand(100));
675 __ bx(LR); 675 __ bx(LR);
676 } 676 }
677 677
678 678
679 ASSEMBLER_TEST_RUN(AddSub, test) { 679 ASSEMBLER_TEST_RUN(AddSub, test) {
680 EXPECT(test != NULL); 680 EXPECT(test != NULL);
681 typedef int (*AddSub)(); 681 typedef int (*AddSub)() DART_UNUSED;
682 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(AddSub, test->entry())); 682 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(AddSub, test->entry()));
683 } 683 }
684 684
685 685
686 ASSEMBLER_TEST_GENERATE(AddCarry, assembler) { 686 ASSEMBLER_TEST_GENERATE(AddCarry, assembler) {
687 __ LoadImmediate(R2, 0xFFFFFFFF); 687 __ LoadImmediate(R2, 0xFFFFFFFF);
688 __ mov(R1, Operand(1)); 688 __ mov(R1, Operand(1));
689 __ mov(R0, Operand(0)); 689 __ mov(R0, Operand(0));
690 __ adds(R2, R2, Operand(R1)); 690 __ adds(R2, R2, Operand(R1));
691 __ adcs(R0, R0, Operand(R0)); 691 __ adcs(R0, R0, Operand(R0));
692 __ bx(LR); 692 __ bx(LR);
693 } 693 }
694 694
695 695
696 ASSEMBLER_TEST_RUN(AddCarry, test) { 696 ASSEMBLER_TEST_RUN(AddCarry, test) {
697 EXPECT(test != NULL); 697 EXPECT(test != NULL);
698 typedef int (*AddCarry)(); 698 typedef int (*AddCarry)() DART_UNUSED;
699 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(AddCarry, test->entry())); 699 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(AddCarry, test->entry()));
700 } 700 }
701 701
702 702
703 ASSEMBLER_TEST_GENERATE(SubCarry, assembler) { 703 ASSEMBLER_TEST_GENERATE(SubCarry, assembler) {
704 __ LoadImmediate(R2, 0x0); 704 __ LoadImmediate(R2, 0x0);
705 __ mov(R1, Operand(1)); 705 __ mov(R1, Operand(1));
706 __ mov(R0, Operand(0)); 706 __ mov(R0, Operand(0));
707 __ subs(R2, R2, Operand(R1)); 707 __ subs(R2, R2, Operand(R1));
708 __ sbcs(R0, R0, Operand(R0)); 708 __ sbcs(R0, R0, Operand(R0));
709 __ bx(LR); 709 __ bx(LR);
710 } 710 }
711 711
712 712
713 ASSEMBLER_TEST_RUN(SubCarry, test) { 713 ASSEMBLER_TEST_RUN(SubCarry, test) {
714 EXPECT(test != NULL); 714 EXPECT(test != NULL);
715 typedef int (*SubCarry)(); 715 typedef int (*SubCarry)() DART_UNUSED;
716 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SubCarry, test->entry())); 716 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SubCarry, test->entry()));
717 } 717 }
718 718
719 719
720 ASSEMBLER_TEST_GENERATE(AndOrr, assembler) { 720 ASSEMBLER_TEST_GENERATE(AndOrr, assembler) {
721 __ mov(R1, Operand(40)); 721 __ mov(R1, Operand(40));
722 __ mov(R2, Operand(0)); 722 __ mov(R2, Operand(0));
723 __ and_(R1, R2, Operand(R1)); 723 __ and_(R1, R2, Operand(R1));
724 __ mov(R3, Operand(42)); 724 __ mov(R3, Operand(42));
725 __ orr(R0, R1, Operand(R3)); 725 __ orr(R0, R1, Operand(R3));
726 __ bx(LR); 726 __ bx(LR);
727 } 727 }
728 728
729 729
730 ASSEMBLER_TEST_RUN(AndOrr, test) { 730 ASSEMBLER_TEST_RUN(AndOrr, test) {
731 EXPECT(test != NULL); 731 EXPECT(test != NULL);
732 typedef int (*AndOrr)(); 732 typedef int (*AndOrr)() DART_UNUSED;
733 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(AndOrr, test->entry())); 733 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(AndOrr, test->entry()));
734 } 734 }
735 735
736 736
737 ASSEMBLER_TEST_GENERATE(Orrs, assembler) { 737 ASSEMBLER_TEST_GENERATE(Orrs, assembler) {
738 __ mov(R0, Operand(0)); 738 __ mov(R0, Operand(0));
739 __ tst(R0, Operand(R1)); // Set zero-flag. 739 __ tst(R0, Operand(R1)); // Set zero-flag.
740 __ orrs(R0, R0, Operand(1)); // Clear zero-flag. 740 __ orrs(R0, R0, Operand(1)); // Clear zero-flag.
741 __ bx(LR, EQ); 741 __ bx(LR, EQ);
742 __ mov(R0, Operand(42)); 742 __ mov(R0, Operand(42));
743 __ bx(LR, NE); // Only this return should fire. 743 __ bx(LR, NE); // Only this return should fire.
744 __ mov(R0, Operand(2)); 744 __ mov(R0, Operand(2));
745 __ bx(LR); 745 __ bx(LR);
746 } 746 }
747 747
748 748
749 ASSEMBLER_TEST_RUN(Orrs, test) { 749 ASSEMBLER_TEST_RUN(Orrs, test) {
750 EXPECT(test != NULL); 750 EXPECT(test != NULL);
751 typedef int (*Orrs)(); 751 typedef int (*Orrs)() DART_UNUSED;
752 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Orrs, test->entry())); 752 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Orrs, test->entry()));
753 } 753 }
754 754
755 755
756 ASSEMBLER_TEST_GENERATE(Multiply, assembler) { 756 ASSEMBLER_TEST_GENERATE(Multiply, assembler) {
757 __ mov(R1, Operand(20)); 757 __ mov(R1, Operand(20));
758 __ mov(R2, Operand(40)); 758 __ mov(R2, Operand(40));
759 __ mul(R3, R2, R1); 759 __ mul(R3, R2, R1);
760 __ mov(R0, Operand(R3)); 760 __ mov(R0, Operand(R3));
761 __ bx(LR); 761 __ bx(LR);
762 } 762 }
763 763
764 764
765 ASSEMBLER_TEST_RUN(Multiply, test) { 765 ASSEMBLER_TEST_RUN(Multiply, test) {
766 EXPECT(test != NULL); 766 EXPECT(test != NULL);
767 typedef int (*Multiply)(); 767 typedef int (*Multiply)() DART_UNUSED;
768 EXPECT_EQ(800, EXECUTE_TEST_CODE_INT32(Multiply, test->entry())); 768 EXPECT_EQ(800, EXECUTE_TEST_CODE_INT32(Multiply, test->entry()));
769 } 769 }
770 770
771 771
772 ASSEMBLER_TEST_GENERATE(QuotientRemainder, assembler) { 772 ASSEMBLER_TEST_GENERATE(QuotientRemainder, assembler) {
773 if (TargetCPUFeatures::vfp_supported()) { 773 if (TargetCPUFeatures::vfp_supported()) {
774 __ vmovsr(S2, R0); 774 __ vmovsr(S2, R0);
775 __ vmovsr(S4, R2); 775 __ vmovsr(S4, R2);
776 __ vcvtdi(D1, S2); 776 __ vcvtdi(D1, S2);
777 __ vcvtdi(D2, S4); 777 __ vcvtdi(D2, S4);
778 __ vdivd(D0, D1, D2); 778 __ vdivd(D0, D1, D2);
779 __ vcvtid(S0, D0); 779 __ vcvtid(S0, D0);
780 __ vmovrs(R1, S0); // r1 = r0/r2 780 __ vmovrs(R1, S0); // r1 = r0/r2
781 __ mls(R0, R1, R2, R0); // r0 = r0 - r1*r2 781 __ mls(R0, R1, R2, R0); // r0 = r0 - r1*r2
782 } else { 782 } else {
783 __ LoadImmediate(R0, 0); 783 __ LoadImmediate(R0, 0);
784 } 784 }
785 __ bx(LR); 785 __ bx(LR);
786 } 786 }
787 787
788 788
789 ASSEMBLER_TEST_RUN(QuotientRemainder, test) { 789 ASSEMBLER_TEST_RUN(QuotientRemainder, test) {
790 EXPECT(test != NULL); 790 EXPECT(test != NULL);
791 if (TargetCPUFeatures::vfp_supported()) { 791 if (TargetCPUFeatures::vfp_supported()) {
792 typedef int64_t (*QuotientRemainder)(int64_t dividend, int64_t divisor); 792 typedef int64_t (*QuotientRemainder)
793 (int64_t dividend, int64_t divisor) DART_UNUSED;
793 EXPECT_EQ(0x1000400000da8LL, 794 EXPECT_EQ(0x1000400000da8LL,
794 EXECUTE_TEST_CODE_INT64_LL(QuotientRemainder, test->entry(), 795 EXECUTE_TEST_CODE_INT64_LL(QuotientRemainder, test->entry(),
795 0x12345678, 0x1234)); 796 0x12345678, 0x1234));
796 } else { 797 } else {
797 typedef int (*QuotientRemainder)(); 798 typedef int (*QuotientRemainder)() DART_UNUSED;
798 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(QuotientRemainder, test->entry())); 799 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(QuotientRemainder, test->entry()));
799 } 800 }
800 } 801 }
801 802
802 803
803 ASSEMBLER_TEST_GENERATE(Multiply64To64, assembler) { 804 ASSEMBLER_TEST_GENERATE(Multiply64To64, assembler) {
804 #if defined(USING_SIMULATOR) 805 #if defined(USING_SIMULATOR)
805 const ARMVersion version = TargetCPUFeatures::arm_version(); 806 const ARMVersion version = TargetCPUFeatures::arm_version();
806 HostCPUFeatures::set_arm_version(ARMv7); 807 HostCPUFeatures::set_arm_version(ARMv7);
807 #endif 808 #endif
(...skipping 10 matching lines...) Expand all
818 } 819 }
819 __ bx(LR); 820 __ bx(LR);
820 #if defined(USING_SIMULATOR) 821 #if defined(USING_SIMULATOR)
821 HostCPUFeatures::set_arm_version(version); 822 HostCPUFeatures::set_arm_version(version);
822 #endif 823 #endif
823 } 824 }
824 825
825 826
826 ASSEMBLER_TEST_RUN(Multiply64To64, test) { 827 ASSEMBLER_TEST_RUN(Multiply64To64, test) {
827 EXPECT(test != NULL); 828 EXPECT(test != NULL);
828 typedef int64_t (*Multiply64To64)(int64_t operand0, int64_t operand1); 829 typedef int64_t (*Multiply64To64)
830 (int64_t operand0, int64_t operand1) DART_UNUSED;
829 EXPECT_EQ(6, 831 EXPECT_EQ(6,
830 EXECUTE_TEST_CODE_INT64_LL(Multiply64To64, test->entry(), -3, -2)); 832 EXECUTE_TEST_CODE_INT64_LL(Multiply64To64, test->entry(), -3, -2));
831 } 833 }
832 834
833 835
834 ASSEMBLER_TEST_GENERATE(Multiply32To64, assembler) { 836 ASSEMBLER_TEST_GENERATE(Multiply32To64, assembler) {
835 #if defined(USING_SIMULATOR) 837 #if defined(USING_SIMULATOR)
836 const ARMVersion version = TargetCPUFeatures::arm_version(); 838 const ARMVersion version = TargetCPUFeatures::arm_version();
837 HostCPUFeatures::set_arm_version(ARMv7); 839 HostCPUFeatures::set_arm_version(ARMv7);
838 #endif 840 #endif
839 if (TargetCPUFeatures::arm_version() == ARMv7) { 841 if (TargetCPUFeatures::arm_version() == ARMv7) {
840 __ smull(R0, R1, R0, R2); 842 __ smull(R0, R1, R0, R2);
841 } else { 843 } else {
842 __ LoadImmediate(R0, 6); 844 __ LoadImmediate(R0, 6);
843 } 845 }
844 __ bx(LR); 846 __ bx(LR);
845 #if defined(USING_SIMULATOR) 847 #if defined(USING_SIMULATOR)
846 HostCPUFeatures::set_arm_version(version); 848 HostCPUFeatures::set_arm_version(version);
847 #endif 849 #endif
848 } 850 }
849 851
850 852
851 ASSEMBLER_TEST_RUN(Multiply32To64, test) { 853 ASSEMBLER_TEST_RUN(Multiply32To64, test) {
852 EXPECT(test != NULL); 854 EXPECT(test != NULL);
853 typedef int64_t (*Multiply32To64)(int64_t operand0, int64_t operand1); 855 typedef int64_t (*Multiply32To64)
856 (int64_t operand0, int64_t operand1) DART_UNUSED;
854 EXPECT_EQ(6, 857 EXPECT_EQ(6,
855 EXECUTE_TEST_CODE_INT64_LL(Multiply32To64, test->entry(), -3, -2)); 858 EXECUTE_TEST_CODE_INT64_LL(Multiply32To64, test->entry(), -3, -2));
856 } 859 }
857 860
858 861
859 ASSEMBLER_TEST_GENERATE(MultiplyAccum32To64, assembler) { 862 ASSEMBLER_TEST_GENERATE(MultiplyAccum32To64, assembler) {
860 #if defined(USING_SIMULATOR) 863 #if defined(USING_SIMULATOR)
861 const ARMVersion version = TargetCPUFeatures::arm_version(); 864 const ARMVersion version = TargetCPUFeatures::arm_version();
862 HostCPUFeatures::set_arm_version(ARMv7); 865 HostCPUFeatures::set_arm_version(ARMv7);
863 #endif 866 #endif
864 if (TargetCPUFeatures::arm_version() == ARMv7) { 867 if (TargetCPUFeatures::arm_version() == ARMv7) {
865 __ smlal(R0, R1, R0, R2); 868 __ smlal(R0, R1, R0, R2);
866 } else { 869 } else {
867 __ LoadImmediate(R0, 3); 870 __ LoadImmediate(R0, 3);
868 } 871 }
869 __ bx(LR); 872 __ bx(LR);
870 #if defined(USING_SIMULATOR) 873 #if defined(USING_SIMULATOR)
871 HostCPUFeatures::set_arm_version(version); 874 HostCPUFeatures::set_arm_version(version);
872 #endif 875 #endif
873 } 876 }
874 877
875 878
876 ASSEMBLER_TEST_RUN(MultiplyAccum32To64, test) { 879 ASSEMBLER_TEST_RUN(MultiplyAccum32To64, test) {
877 EXPECT(test != NULL); 880 EXPECT(test != NULL);
878 typedef int64_t (*Multiply32To64)(int64_t operand0, int64_t operand1); 881 typedef int64_t (*Multiply32To64)
882 (int64_t operand0, int64_t operand1) DART_UNUSED;
879 EXPECT_EQ(3, 883 EXPECT_EQ(3,
880 EXECUTE_TEST_CODE_INT64_LL(Multiply32To64, test->entry(), -3, -2)); 884 EXECUTE_TEST_CODE_INT64_LL(Multiply32To64, test->entry(), -3, -2));
881 } 885 }
882 886
883 887
884 ASSEMBLER_TEST_GENERATE(Clz, assembler) { 888 ASSEMBLER_TEST_GENERATE(Clz, assembler) {
885 Label error; 889 Label error;
886 890
887 __ mov(R0, Operand(0)); 891 __ mov(R0, Operand(0));
888 __ clz(R1, R0); 892 __ clz(R1, R0);
(...skipping 14 matching lines...) Expand all
903 __ mov(R0, Operand(0)); 907 __ mov(R0, Operand(0));
904 __ bx(LR); 908 __ bx(LR);
905 __ Bind(&error); 909 __ Bind(&error);
906 __ mov(R0, Operand(1)); 910 __ mov(R0, Operand(1));
907 __ bx(LR); 911 __ bx(LR);
908 } 912 }
909 913
910 914
911 ASSEMBLER_TEST_RUN(Clz, test) { 915 ASSEMBLER_TEST_RUN(Clz, test) {
912 EXPECT(test != NULL); 916 EXPECT(test != NULL);
913 typedef int (*Clz)(); 917 typedef int (*Clz)() DART_UNUSED;
914 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Clz, test->entry())); 918 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Clz, test->entry()));
915 } 919 }
916 920
917 921
918 ASSEMBLER_TEST_GENERATE(Tst, assembler) { 922 ASSEMBLER_TEST_GENERATE(Tst, assembler) {
919 Label skip; 923 Label skip;
920 924
921 __ mov(R0, Operand(42)); 925 __ mov(R0, Operand(42));
922 __ mov(R1, Operand(40)); 926 __ mov(R1, Operand(40));
923 __ tst(R1, Operand(0)); 927 __ tst(R1, Operand(0));
924 __ b(&skip, NE); 928 __ b(&skip, NE);
925 __ mov(R0, Operand(0)); 929 __ mov(R0, Operand(0));
926 __ Bind(&skip); 930 __ Bind(&skip);
927 __ bx(LR); 931 __ bx(LR);
928 } 932 }
929 933
930 934
931 ASSEMBLER_TEST_RUN(Tst, test) { 935 ASSEMBLER_TEST_RUN(Tst, test) {
932 EXPECT(test != NULL); 936 EXPECT(test != NULL);
933 typedef int (*Tst)(); 937 typedef int (*Tst)() DART_UNUSED;
934 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 938 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
935 } 939 }
936 940
937 941
938 ASSEMBLER_TEST_GENERATE(Lsl, assembler) { 942 ASSEMBLER_TEST_GENERATE(Lsl, assembler) {
939 Label skip; 943 Label skip;
940 944
941 __ mov(R0, Operand(1)); 945 __ mov(R0, Operand(1));
942 __ mov(R0, Operand(R0, LSL, 1)); 946 __ mov(R0, Operand(R0, LSL, 1));
943 __ mov(R1, Operand(1)); 947 __ mov(R1, Operand(1));
944 __ mov(R0, Operand(R0, LSL, R1)); 948 __ mov(R0, Operand(R0, LSL, R1));
945 __ bx(LR); 949 __ bx(LR);
946 } 950 }
947 951
948 952
949 ASSEMBLER_TEST_RUN(Lsl, test) { 953 ASSEMBLER_TEST_RUN(Lsl, test) {
950 EXPECT(test != NULL); 954 EXPECT(test != NULL);
951 typedef int (*Tst)(); 955 typedef int (*Tst)() DART_UNUSED;
952 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 956 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
953 } 957 }
954 958
955 959
956 ASSEMBLER_TEST_GENERATE(Lsr, assembler) { 960 ASSEMBLER_TEST_GENERATE(Lsr, assembler) {
957 Label skip; 961 Label skip;
958 962
959 __ mov(R0, Operand(4)); 963 __ mov(R0, Operand(4));
960 __ mov(R0, Operand(R0, LSR, 1)); 964 __ mov(R0, Operand(R0, LSR, 1));
961 __ mov(R1, Operand(1)); 965 __ mov(R1, Operand(1));
962 __ mov(R0, Operand(R0, LSR, R1)); 966 __ mov(R0, Operand(R0, LSR, R1));
963 __ bx(LR); 967 __ bx(LR);
964 } 968 }
965 969
966 970
967 ASSEMBLER_TEST_RUN(Lsr, test) { 971 ASSEMBLER_TEST_RUN(Lsr, test) {
968 EXPECT(test != NULL); 972 EXPECT(test != NULL);
969 typedef int (*Tst)(); 973 typedef int (*Tst)() DART_UNUSED;
970 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 974 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
971 } 975 }
972 976
973 977
974 ASSEMBLER_TEST_GENERATE(Lsr1, assembler) { 978 ASSEMBLER_TEST_GENERATE(Lsr1, assembler) {
975 Label skip; 979 Label skip;
976 980
977 __ mov(R0, Operand(1)); 981 __ mov(R0, Operand(1));
978 __ Lsl(R0, R0, 31); 982 __ Lsl(R0, R0, 31);
979 __ Lsr(R0, R0, 31); 983 __ Lsr(R0, R0, 31);
980 __ bx(LR); 984 __ bx(LR);
981 } 985 }
982 986
983 987
984 ASSEMBLER_TEST_RUN(Lsr1, test) { 988 ASSEMBLER_TEST_RUN(Lsr1, test) {
985 EXPECT(test != NULL); 989 EXPECT(test != NULL);
986 typedef int (*Tst)(); 990 typedef int (*Tst)() DART_UNUSED;
987 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 991 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
988 } 992 }
989 993
990 994
991 ASSEMBLER_TEST_GENERATE(Asr1, assembler) { 995 ASSEMBLER_TEST_GENERATE(Asr1, assembler) {
992 Label skip; 996 Label skip;
993 997
994 __ mov(R0, Operand(1)); 998 __ mov(R0, Operand(1));
995 __ Lsl(R0, R0, 31); 999 __ Lsl(R0, R0, 31);
996 __ Asr(R0, R0, 31); 1000 __ Asr(R0, R0, 31);
997 __ bx(LR); 1001 __ bx(LR);
998 } 1002 }
999 1003
1000 1004
1001 ASSEMBLER_TEST_RUN(Asr1, test) { 1005 ASSEMBLER_TEST_RUN(Asr1, test) {
1002 EXPECT(test != NULL); 1006 EXPECT(test != NULL);
1003 typedef int (*Tst)(); 1007 typedef int (*Tst)() DART_UNUSED;
1004 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1008 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1005 } 1009 }
1006 1010
1007 1011
1008 ASSEMBLER_TEST_GENERATE(Rsb, assembler) { 1012 ASSEMBLER_TEST_GENERATE(Rsb, assembler) {
1009 __ mov(R3, Operand(10)); 1013 __ mov(R3, Operand(10));
1010 __ rsb(R0, R3, Operand(42)); 1014 __ rsb(R0, R3, Operand(42));
1011 __ bx(LR); 1015 __ bx(LR);
1012 } 1016 }
1013 1017
1014 1018
1015 ASSEMBLER_TEST_RUN(Rsb, test) { 1019 ASSEMBLER_TEST_RUN(Rsb, test) {
1016 EXPECT(test != NULL); 1020 EXPECT(test != NULL);
1017 typedef int (*Rsb)(); 1021 typedef int (*Rsb)() DART_UNUSED;
1018 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(Rsb, test->entry())); 1022 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(Rsb, test->entry()));
1019 } 1023 }
1020 1024
1021 1025
1022 ASSEMBLER_TEST_GENERATE(Ldrh, assembler) { 1026 ASSEMBLER_TEST_GENERATE(Ldrh, assembler) {
1023 Label Test1, Test2, Test3, Done; 1027 Label Test1, Test2, Test3, Done;
1024 1028
1025 __ mov(R1, Operand(0x11)); 1029 __ mov(R1, Operand(0x11));
1026 __ mov(R2, Operand(SP)); 1030 __ mov(R2, Operand(SP));
1027 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1031 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex));
(...skipping 25 matching lines...) Expand all
1053 1057
1054 __ mov(R0, Operand(0)); 1058 __ mov(R0, Operand(0));
1055 __ Bind(&Done); 1059 __ Bind(&Done);
1056 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex)); 1060 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex));
1057 __ bx(LR); 1061 __ bx(LR);
1058 } 1062 }
1059 1063
1060 1064
1061 ASSEMBLER_TEST_RUN(Ldrh, test) { 1065 ASSEMBLER_TEST_RUN(Ldrh, test) {
1062 EXPECT(test != NULL); 1066 EXPECT(test != NULL);
1063 typedef int (*Tst)(); 1067 typedef int (*Tst)() DART_UNUSED;
1064 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1068 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1065 } 1069 }
1066 1070
1067 1071
1068 ASSEMBLER_TEST_GENERATE(Ldrsb, assembler) { 1072 ASSEMBLER_TEST_GENERATE(Ldrsb, assembler) {
1069 __ mov(R1, Operand(0xFF)); 1073 __ mov(R1, Operand(0xFF));
1070 __ mov(R2, Operand(SP)); 1074 __ mov(R2, Operand(SP));
1071 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1075 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex));
1072 __ ldrsb(R0, Address(R2, (-kWordSize * 30))); 1076 __ ldrsb(R0, Address(R2, (-kWordSize * 30)));
1073 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex)); 1077 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex));
1074 __ bx(LR); 1078 __ bx(LR);
1075 } 1079 }
1076 1080
1077 1081
1078 ASSEMBLER_TEST_RUN(Ldrsb, test) { 1082 ASSEMBLER_TEST_RUN(Ldrsb, test) {
1079 EXPECT(test != NULL); 1083 EXPECT(test != NULL);
1080 typedef int (*Tst)(); 1084 typedef int (*Tst)() DART_UNUSED;
1081 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1085 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1082 } 1086 }
1083 1087
1084 1088
1085 ASSEMBLER_TEST_GENERATE(Ldrb, assembler) { 1089 ASSEMBLER_TEST_GENERATE(Ldrb, assembler) {
1086 __ mov(R1, Operand(0xFF)); 1090 __ mov(R1, Operand(0xFF));
1087 __ mov(R2, Operand(SP)); 1091 __ mov(R2, Operand(SP));
1088 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1092 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex));
1089 __ ldrb(R0, Address(R2, (-kWordSize * 30))); 1093 __ ldrb(R0, Address(R2, (-kWordSize * 30)));
1090 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex)); 1094 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex));
1091 __ bx(LR); 1095 __ bx(LR);
1092 } 1096 }
1093 1097
1094 1098
1095 ASSEMBLER_TEST_RUN(Ldrb, test) { 1099 ASSEMBLER_TEST_RUN(Ldrb, test) {
1096 EXPECT(test != NULL); 1100 EXPECT(test != NULL);
1097 typedef int (*Tst)(); 1101 typedef int (*Tst)() DART_UNUSED;
1098 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1102 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1099 } 1103 }
1100 1104
1101 1105
1102 ASSEMBLER_TEST_GENERATE(Ldrsh, assembler) { 1106 ASSEMBLER_TEST_GENERATE(Ldrsh, assembler) {
1103 __ mov(R1, Operand(0xFF)); 1107 __ mov(R1, Operand(0xFF));
1104 __ mov(R2, Operand(SP)); 1108 __ mov(R2, Operand(SP));
1105 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1109 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex));
1106 __ ldrsh(R0, Address(R2, (-kWordSize * 30))); 1110 __ ldrsh(R0, Address(R2, (-kWordSize * 30)));
1107 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex)); 1111 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex));
1108 __ bx(LR); 1112 __ bx(LR);
1109 } 1113 }
1110 1114
1111 1115
1112 ASSEMBLER_TEST_RUN(Ldrsh, test) { 1116 ASSEMBLER_TEST_RUN(Ldrsh, test) {
1113 EXPECT(test != NULL); 1117 EXPECT(test != NULL);
1114 typedef int (*Tst)(); 1118 typedef int (*Tst)() DART_UNUSED;
1115 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1119 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1116 } 1120 }
1117 1121
1118 1122
1119 ASSEMBLER_TEST_GENERATE(Ldrh1, assembler) { 1123 ASSEMBLER_TEST_GENERATE(Ldrh1, assembler) {
1120 __ mov(R1, Operand(0xFF)); 1124 __ mov(R1, Operand(0xFF));
1121 __ mov(R2, Operand(SP)); 1125 __ mov(R2, Operand(SP));
1122 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1126 __ str(R1, Address(SP, (-kWordSize * 30), Address::PreIndex));
1123 __ ldrh(R0, Address(R2, (-kWordSize * 30))); 1127 __ ldrh(R0, Address(R2, (-kWordSize * 30)));
1124 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex)); 1128 __ ldr(R1, Address(SP, (kWordSize * 30), Address::PostIndex));
1125 __ bx(LR); 1129 __ bx(LR);
1126 } 1130 }
1127 1131
1128 1132
1129 ASSEMBLER_TEST_RUN(Ldrh1, test) { 1133 ASSEMBLER_TEST_RUN(Ldrh1, test) {
1130 EXPECT(test != NULL); 1134 EXPECT(test != NULL);
1131 typedef int (*Tst)(); 1135 typedef int (*Tst)() DART_UNUSED;
1132 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1136 EXPECT_EQ(0xff, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1133 } 1137 }
1134 1138
1135 1139
1136 ASSEMBLER_TEST_GENERATE(Ldrd, assembler) { 1140 ASSEMBLER_TEST_GENERATE(Ldrd, assembler) {
1137 __ mov(IP, Operand(SP)); 1141 __ mov(IP, Operand(SP));
1138 __ strd(R2, Address(SP, (-kWordSize * 30), Address::PreIndex)); 1142 __ strd(R2, Address(SP, (-kWordSize * 30), Address::PreIndex));
1139 __ strd(R0, Address(IP, (-kWordSize * 28))); 1143 __ strd(R0, Address(IP, (-kWordSize * 28)));
1140 __ ldrd(R2, Address(IP, (-kWordSize * 28))); 1144 __ ldrd(R2, Address(IP, (-kWordSize * 28)));
1141 __ ldrd(R0, Address(SP, (kWordSize * 30), Address::PostIndex)); 1145 __ ldrd(R0, Address(SP, (kWordSize * 30), Address::PostIndex));
1142 __ sub(R0, R0, Operand(R2)); 1146 __ sub(R0, R0, Operand(R2));
1143 __ add(R1, R1, Operand(R3)); 1147 __ add(R1, R1, Operand(R3));
1144 __ bx(LR); 1148 __ bx(LR);
1145 } 1149 }
1146 1150
1147 1151
1148 ASSEMBLER_TEST_RUN(Ldrd, test) { 1152 ASSEMBLER_TEST_RUN(Ldrd, test) {
1149 EXPECT(test != NULL); 1153 EXPECT(test != NULL);
1150 typedef int64_t (*Tst)(int64_t r0r1, int64_t r2r3); 1154 typedef int64_t (*Tst)(int64_t r0r1, int64_t r2r3) DART_UNUSED;
1151 EXPECT_EQ(0x0000444400002222LL, EXECUTE_TEST_CODE_INT64_LL( 1155 EXPECT_EQ(0x0000444400002222LL, EXECUTE_TEST_CODE_INT64_LL(
1152 Tst, test->entry(), 0x0000111100000000LL, 0x0000333300002222LL)); 1156 Tst, test->entry(), 0x0000111100000000LL, 0x0000333300002222LL));
1153 } 1157 }
1154 1158
1155 1159
1156 ASSEMBLER_TEST_GENERATE(Ldm_stm_da, assembler) { 1160 ASSEMBLER_TEST_GENERATE(Ldm_stm_da, assembler) {
1157 __ mov(R0, Operand(1)); 1161 __ mov(R0, Operand(1));
1158 __ mov(R1, Operand(7)); 1162 __ mov(R1, Operand(7));
1159 __ mov(R2, Operand(11)); 1163 __ mov(R2, Operand(11));
1160 __ mov(R3, Operand(31)); 1164 __ mov(R3, Operand(31));
(...skipping 23 matching lines...) Expand all
1184 __ Pop(R5); // Restore R5. 1188 __ Pop(R5); // Restore R5.
1185 __ Pop(R5); // Restore R5. 1189 __ Pop(R5); // Restore R5.
1186 __ Pop(R5); // Restore R5. 1190 __ Pop(R5); // Restore R5.
1187 __ Pop(R5); // Restore R5. 1191 __ Pop(R5); // Restore R5.
1188 __ bx(LR); 1192 __ bx(LR);
1189 } 1193 }
1190 1194
1191 1195
1192 ASSEMBLER_TEST_RUN(Ldm_stm_da, test) { 1196 ASSEMBLER_TEST_RUN(Ldm_stm_da, test) {
1193 EXPECT(test != NULL); 1197 EXPECT(test != NULL);
1194 typedef int (*Tst)(); 1198 typedef int (*Tst)() DART_UNUSED;
1195 EXPECT_EQ(-52, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1199 EXPECT_EQ(-52, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1196 } 1200 }
1197 1201
1198 1202
1199 ASSEMBLER_TEST_GENERATE(AddressShiftStrLSL1NegOffset, assembler) { 1203 ASSEMBLER_TEST_GENERATE(AddressShiftStrLSL1NegOffset, assembler) {
1200 __ mov(R2, Operand(42)); 1204 __ mov(R2, Operand(42));
1201 __ mov(R1, Operand(kWordSize)); 1205 __ mov(R1, Operand(kWordSize));
1202 __ str(R2, Address(SP, R1, LSL, 1, Address::NegOffset)); 1206 __ str(R2, Address(SP, R1, LSL, 1, Address::NegOffset));
1203 __ ldr(R0, Address(SP, (-kWordSize * 2), Address::Offset)); 1207 __ ldr(R0, Address(SP, (-kWordSize * 2), Address::Offset));
1204 __ bx(LR); 1208 __ bx(LR);
1205 } 1209 }
1206 1210
1207 1211
1208 ASSEMBLER_TEST_RUN(AddressShiftStrLSL1NegOffset, test) { 1212 ASSEMBLER_TEST_RUN(AddressShiftStrLSL1NegOffset, test) {
1209 EXPECT(test != NULL); 1213 EXPECT(test != NULL);
1210 typedef int (*Tst)(); 1214 typedef int (*Tst)() DART_UNUSED;
1211 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1215 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1212 } 1216 }
1213 1217
1214 1218
1215 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLSL5NegOffset, assembler) { 1219 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLSL5NegOffset, assembler) {
1216 __ mov(R2, Operand(42)); 1220 __ mov(R2, Operand(42));
1217 __ mov(R1, Operand(kWordSize)); 1221 __ mov(R1, Operand(kWordSize));
1218 __ str(R2, Address(SP, (-kWordSize * 32), Address::Offset)); 1222 __ str(R2, Address(SP, (-kWordSize * 32), Address::Offset));
1219 __ ldr(R0, Address(SP, R1, LSL, 5, Address::NegOffset)); 1223 __ ldr(R0, Address(SP, R1, LSL, 5, Address::NegOffset));
1220 __ bx(LR); 1224 __ bx(LR);
1221 } 1225 }
1222 1226
1223 1227
1224 ASSEMBLER_TEST_RUN(AddressShiftLdrLSL5NegOffset, test) { 1228 ASSEMBLER_TEST_RUN(AddressShiftLdrLSL5NegOffset, test) {
1225 EXPECT(test != NULL); 1229 EXPECT(test != NULL);
1226 typedef int (*Tst)(); 1230 typedef int (*Tst)() DART_UNUSED;
1227 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1231 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1228 } 1232 }
1229 1233
1230 1234
1231 ASSEMBLER_TEST_GENERATE(AddressShiftStrLRS1NegOffset, assembler) { 1235 ASSEMBLER_TEST_GENERATE(AddressShiftStrLRS1NegOffset, assembler) {
1232 __ mov(R2, Operand(42)); 1236 __ mov(R2, Operand(42));
1233 __ mov(R1, Operand(kWordSize * 2)); 1237 __ mov(R1, Operand(kWordSize * 2));
1234 __ str(R2, Address(SP, R1, LSR, 1, Address::NegOffset)); 1238 __ str(R2, Address(SP, R1, LSR, 1, Address::NegOffset));
1235 __ ldr(R0, Address(SP, -kWordSize, Address::Offset)); 1239 __ ldr(R0, Address(SP, -kWordSize, Address::Offset));
1236 __ bx(LR); 1240 __ bx(LR);
1237 } 1241 }
1238 1242
1239 1243
1240 ASSEMBLER_TEST_RUN(AddressShiftStrLRS1NegOffset, test) { 1244 ASSEMBLER_TEST_RUN(AddressShiftStrLRS1NegOffset, test) {
1241 EXPECT(test != NULL); 1245 EXPECT(test != NULL);
1242 typedef int (*Tst)(); 1246 typedef int (*Tst)() DART_UNUSED;
1243 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1247 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1244 } 1248 }
1245 1249
1246 1250
1247 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLRS1NegOffset, assembler) { 1251 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLRS1NegOffset, assembler) {
1248 __ mov(R2, Operand(42)); 1252 __ mov(R2, Operand(42));
1249 __ mov(R1, Operand(kWordSize * 2)); 1253 __ mov(R1, Operand(kWordSize * 2));
1250 __ str(R2, Address(SP, -kWordSize, Address::Offset)); 1254 __ str(R2, Address(SP, -kWordSize, Address::Offset));
1251 __ ldr(R0, Address(SP, R1, LSR, 1, Address::NegOffset)); 1255 __ ldr(R0, Address(SP, R1, LSR, 1, Address::NegOffset));
1252 __ bx(LR); 1256 __ bx(LR);
1253 } 1257 }
1254 1258
1255 1259
1256 ASSEMBLER_TEST_RUN(AddressShiftLdrLRS1NegOffset, test) { 1260 ASSEMBLER_TEST_RUN(AddressShiftLdrLRS1NegOffset, test) {
1257 EXPECT(test != NULL); 1261 EXPECT(test != NULL);
1258 typedef int (*Tst)(); 1262 typedef int (*Tst)() DART_UNUSED;
1259 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1263 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1260 } 1264 }
1261 1265
1262 1266
1263 ASSEMBLER_TEST_GENERATE(AddressShiftStrLSLNegPreIndex, assembler) { 1267 ASSEMBLER_TEST_GENERATE(AddressShiftStrLSLNegPreIndex, assembler) {
1264 __ mov(R2, Operand(42)); 1268 __ mov(R2, Operand(42));
1265 __ mov(R1, Operand(kWordSize)); 1269 __ mov(R1, Operand(kWordSize));
1266 __ mov(R3, Operand(SP)); 1270 __ mov(R3, Operand(SP));
1267 __ str(R2, Address(SP, R1, LSL, 5, Address::NegPreIndex)); 1271 __ str(R2, Address(SP, R1, LSL, 5, Address::NegPreIndex));
1268 __ ldr(R0, Address(R3, (-kWordSize * 32), Address::Offset)); 1272 __ ldr(R0, Address(R3, (-kWordSize * 32), Address::Offset));
1269 __ mov(SP, Operand(R3)); 1273 __ mov(SP, Operand(R3));
1270 __ bx(LR); 1274 __ bx(LR);
1271 } 1275 }
1272 1276
1273 1277
1274 ASSEMBLER_TEST_RUN(AddressShiftStrLSLNegPreIndex, test) { 1278 ASSEMBLER_TEST_RUN(AddressShiftStrLSLNegPreIndex, test) {
1275 EXPECT(test != NULL); 1279 EXPECT(test != NULL);
1276 typedef int (*Tst)(); 1280 typedef int (*Tst)() DART_UNUSED;
1277 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1281 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1278 } 1282 }
1279 1283
1280 1284
1281 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLSLNegPreIndex, assembler) { 1285 ASSEMBLER_TEST_GENERATE(AddressShiftLdrLSLNegPreIndex, assembler) {
1282 __ mov(R2, Operand(42)); 1286 __ mov(R2, Operand(42));
1283 __ mov(R1, Operand(kWordSize)); 1287 __ mov(R1, Operand(kWordSize));
1284 __ str(R2, Address(SP, (-kWordSize * 32), Address::PreIndex)); 1288 __ str(R2, Address(SP, (-kWordSize * 32), Address::PreIndex));
1285 __ ldr(R0, Address(SP, R1, LSL, 5, Address::PostIndex)); 1289 __ ldr(R0, Address(SP, R1, LSL, 5, Address::PostIndex));
1286 __ bx(LR); 1290 __ bx(LR);
1287 } 1291 }
1288 1292
1289 1293
1290 ASSEMBLER_TEST_RUN(AddressShiftLdrLSLNegPreIndex, test) { 1294 ASSEMBLER_TEST_RUN(AddressShiftLdrLSLNegPreIndex, test) {
1291 EXPECT(test != NULL); 1295 EXPECT(test != NULL);
1292 typedef int (*Tst)(); 1296 typedef int (*Tst)() DART_UNUSED;
1293 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1297 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1294 } 1298 }
1295 1299
1296 1300
1297 // Make sure we can store and reload the D registers using vstmd and vldmd 1301 // Make sure we can store and reload the D registers using vstmd and vldmd
1298 ASSEMBLER_TEST_GENERATE(VstmdVldmd, assembler) { 1302 ASSEMBLER_TEST_GENERATE(VstmdVldmd, assembler) {
1299 if (TargetCPUFeatures::vfp_supported()) { 1303 if (TargetCPUFeatures::vfp_supported()) {
1300 __ LoadDImmediate(D0, 0.0, R0); 1304 __ LoadDImmediate(D0, 0.0, R0);
1301 __ LoadDImmediate(D1, 1.0, R0); 1305 __ LoadDImmediate(D1, 1.0, R0);
1302 __ LoadDImmediate(D2, 2.0, R0); 1306 __ LoadDImmediate(D2, 2.0, R0);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 __ mov(R0, Operand(0), NE); // Put failure into R0 if NE 1343 __ mov(R0, Operand(0), NE); // Put failure into R0 if NE
1340 } else { 1344 } else {
1341 __ LoadImmediate(R0, 42); 1345 __ LoadImmediate(R0, 42);
1342 } 1346 }
1343 __ bx(LR); 1347 __ bx(LR);
1344 } 1348 }
1345 1349
1346 1350
1347 ASSEMBLER_TEST_RUN(VstmdVldmd, test) { 1351 ASSEMBLER_TEST_RUN(VstmdVldmd, test) {
1348 EXPECT(test != NULL); 1352 EXPECT(test != NULL);
1349 typedef int (*Tst)(); 1353 typedef int (*Tst)() DART_UNUSED;
1350 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1354 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1351 } 1355 }
1352 1356
1353 1357
1354 // Make sure we can store and reload the S registers using vstms and vldms 1358 // Make sure we can store and reload the S registers using vstms and vldms
1355 ASSEMBLER_TEST_GENERATE(VstmsVldms, assembler) { 1359 ASSEMBLER_TEST_GENERATE(VstmsVldms, assembler) {
1356 if (TargetCPUFeatures::vfp_supported()) { 1360 if (TargetCPUFeatures::vfp_supported()) {
1357 __ LoadSImmediate(S0, 0.0); 1361 __ LoadSImmediate(S0, 0.0);
1358 __ LoadSImmediate(S1, 1.0); 1362 __ LoadSImmediate(S1, 1.0);
1359 __ LoadSImmediate(S2, 2.0); 1363 __ LoadSImmediate(S2, 2.0);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE 1399 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE
1396 } else { 1400 } else {
1397 __ LoadImmediate(R0, 42); 1401 __ LoadImmediate(R0, 42);
1398 } 1402 }
1399 __ bx(LR); 1403 __ bx(LR);
1400 } 1404 }
1401 1405
1402 1406
1403 ASSEMBLER_TEST_RUN(VstmsVldms, test) { 1407 ASSEMBLER_TEST_RUN(VstmsVldms, test) {
1404 EXPECT(test != NULL); 1408 EXPECT(test != NULL);
1405 typedef int (*Tst)(); 1409 typedef int (*Tst)() DART_UNUSED;
1406 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1410 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1407 } 1411 }
1408 1412
1409 1413
1410 // Make sure we can start somewhere other than D0 1414 // Make sure we can start somewhere other than D0
1411 ASSEMBLER_TEST_GENERATE(VstmdVldmd1, assembler) { 1415 ASSEMBLER_TEST_GENERATE(VstmdVldmd1, assembler) {
1412 if (TargetCPUFeatures::vfp_supported()) { 1416 if (TargetCPUFeatures::vfp_supported()) {
1413 __ LoadDImmediate(D1, 1.0, R0); 1417 __ LoadDImmediate(D1, 1.0, R0);
1414 __ LoadDImmediate(D2, 2.0, R0); 1418 __ LoadDImmediate(D2, 2.0, R0);
1415 __ LoadDImmediate(D3, 3.0, R0); 1419 __ LoadDImmediate(D3, 3.0, R0);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 __ mov(R0, Operand(0), NE); // Put failure into R0 if NE 1454 __ mov(R0, Operand(0), NE); // Put failure into R0 if NE
1451 } else { 1455 } else {
1452 __ LoadImmediate(R0, 42); 1456 __ LoadImmediate(R0, 42);
1453 } 1457 }
1454 __ bx(LR); 1458 __ bx(LR);
1455 } 1459 }
1456 1460
1457 1461
1458 ASSEMBLER_TEST_RUN(VstmdVldmd1, test) { 1462 ASSEMBLER_TEST_RUN(VstmdVldmd1, test) {
1459 EXPECT(test != NULL); 1463 EXPECT(test != NULL);
1460 typedef int (*Tst)(); 1464 typedef int (*Tst)() DART_UNUSED;
1461 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1465 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1462 } 1466 }
1463 1467
1464 1468
1465 // Make sure we can start somewhere other than S0 1469 // Make sure we can start somewhere other than S0
1466 ASSEMBLER_TEST_GENERATE(VstmsVldms1, assembler) { 1470 ASSEMBLER_TEST_GENERATE(VstmsVldms1, assembler) {
1467 if (TargetCPUFeatures::vfp_supported()) { 1471 if (TargetCPUFeatures::vfp_supported()) {
1468 __ LoadSImmediate(S1, 1.0); 1472 __ LoadSImmediate(S1, 1.0);
1469 __ LoadSImmediate(S2, 2.0); 1473 __ LoadSImmediate(S2, 2.0);
1470 __ LoadSImmediate(S3, 3.0); 1474 __ LoadSImmediate(S3, 3.0);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE 1508 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE
1505 } else { 1509 } else {
1506 __ LoadImmediate(R0, 42); 1510 __ LoadImmediate(R0, 42);
1507 } 1511 }
1508 __ bx(LR); 1512 __ bx(LR);
1509 } 1513 }
1510 1514
1511 1515
1512 ASSEMBLER_TEST_RUN(VstmsVldms1, test) { 1516 ASSEMBLER_TEST_RUN(VstmsVldms1, test) {
1513 EXPECT(test != NULL); 1517 EXPECT(test != NULL);
1514 typedef int (*Tst)(); 1518 typedef int (*Tst)() DART_UNUSED;
1515 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1519 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1516 } 1520 }
1517 1521
1518 1522
1519 // Make sure we can store the D registers using vstmd and 1523 // Make sure we can store the D registers using vstmd and
1520 // load them into a different set using vldmd 1524 // load them into a different set using vldmd
1521 ASSEMBLER_TEST_GENERATE(VstmdVldmd_off, assembler) { 1525 ASSEMBLER_TEST_GENERATE(VstmdVldmd_off, assembler) {
1522 if (TargetCPUFeatures::vfp_supported()) { 1526 if (TargetCPUFeatures::vfp_supported()) {
1523 // Save used callee-saved FPU registers. 1527 // Save used callee-saved FPU registers.
1524 __ vstmd(DB_W, SP, D8, 3); 1528 __ vstmd(DB_W, SP, D8, 3);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 __ vldmd(IA_W, SP, D8, 3); 1573 __ vldmd(IA_W, SP, D8, 3);
1570 } else { 1574 } else {
1571 __ LoadImmediate(R0, 42); 1575 __ LoadImmediate(R0, 42);
1572 } 1576 }
1573 __ bx(LR); 1577 __ bx(LR);
1574 } 1578 }
1575 1579
1576 1580
1577 ASSEMBLER_TEST_RUN(VstmdVldmd_off, test) { 1581 ASSEMBLER_TEST_RUN(VstmdVldmd_off, test) {
1578 EXPECT(test != NULL); 1582 EXPECT(test != NULL);
1579 typedef int (*Tst)(); 1583 typedef int (*Tst)() DART_UNUSED;
1580 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1584 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1581 } 1585 }
1582 1586
1583 1587
1584 // Make sure we can start somewhere other than S0 1588 // Make sure we can start somewhere other than S0
1585 ASSEMBLER_TEST_GENERATE(VstmsVldms_off, assembler) { 1589 ASSEMBLER_TEST_GENERATE(VstmsVldms_off, assembler) {
1586 if (TargetCPUFeatures::vfp_supported()) { 1590 if (TargetCPUFeatures::vfp_supported()) {
1587 __ LoadSImmediate(S0, 0.0); 1591 __ LoadSImmediate(S0, 0.0);
1588 __ LoadSImmediate(S1, 1.0); 1592 __ LoadSImmediate(S1, 1.0);
1589 __ LoadSImmediate(S2, 2.0); 1593 __ LoadSImmediate(S2, 2.0);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1627 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE 1631 __ mov(R0, Operand(0), NE); // Put failure value into R0 if NE
1628 } else { 1632 } else {
1629 __ LoadImmediate(R0, 42); 1633 __ LoadImmediate(R0, 42);
1630 } 1634 }
1631 __ bx(LR); 1635 __ bx(LR);
1632 } 1636 }
1633 1637
1634 1638
1635 ASSEMBLER_TEST_RUN(VstmsVldms_off, test) { 1639 ASSEMBLER_TEST_RUN(VstmsVldms_off, test) {
1636 EXPECT(test != NULL); 1640 EXPECT(test != NULL);
1637 typedef int (*Tst)(); 1641 typedef int (*Tst)() DART_UNUSED;
1638 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1642 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1639 } 1643 }
1640 1644
1641 1645
1642 ASSEMBLER_TEST_GENERATE(Udiv, assembler) { 1646 ASSEMBLER_TEST_GENERATE(Udiv, assembler) {
1643 if (TargetCPUFeatures::integer_division_supported()) { 1647 if (TargetCPUFeatures::integer_division_supported()) {
1644 __ mov(R0, Operand(27)); 1648 __ mov(R0, Operand(27));
1645 __ mov(R1, Operand(9)); 1649 __ mov(R1, Operand(9));
1646 __ udiv(R2, R0, R1); 1650 __ udiv(R2, R0, R1);
1647 __ mov(R0, Operand(R2)); 1651 __ mov(R0, Operand(R2));
1648 } else { 1652 } else {
1649 __ mov(R0, Operand(3)); 1653 __ mov(R0, Operand(3));
1650 } 1654 }
1651 __ bx(LR); 1655 __ bx(LR);
1652 } 1656 }
1653 1657
1654 1658
1655 ASSEMBLER_TEST_RUN(Udiv, test) { 1659 ASSEMBLER_TEST_RUN(Udiv, test) {
1656 EXPECT(test != NULL); 1660 EXPECT(test != NULL);
1657 typedef int (*Tst)(); 1661 typedef int (*Tst)() DART_UNUSED;
1658 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1662 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1659 } 1663 }
1660 1664
1661 1665
1662 ASSEMBLER_TEST_GENERATE(Sdiv, assembler) { 1666 ASSEMBLER_TEST_GENERATE(Sdiv, assembler) {
1663 if (TargetCPUFeatures::integer_division_supported()) { 1667 if (TargetCPUFeatures::integer_division_supported()) {
1664 __ mov(R0, Operand(27)); 1668 __ mov(R0, Operand(27));
1665 __ LoadImmediate(R1, -9); 1669 __ LoadImmediate(R1, -9);
1666 __ sdiv(R2, R0, R1); 1670 __ sdiv(R2, R0, R1);
1667 __ mov(R0, Operand(R2)); 1671 __ mov(R0, Operand(R2));
1668 } else { 1672 } else {
1669 __ LoadImmediate(R0, -3); 1673 __ LoadImmediate(R0, -3);
1670 } 1674 }
1671 __ bx(LR); 1675 __ bx(LR);
1672 } 1676 }
1673 1677
1674 1678
1675 ASSEMBLER_TEST_RUN(Sdiv, test) { 1679 ASSEMBLER_TEST_RUN(Sdiv, test) {
1676 EXPECT(test != NULL); 1680 EXPECT(test != NULL);
1677 typedef int (*Tst)(); 1681 typedef int (*Tst)() DART_UNUSED;
1678 EXPECT_EQ(-3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1682 EXPECT_EQ(-3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1679 } 1683 }
1680 1684
1681 1685
1682 ASSEMBLER_TEST_GENERATE(Udiv_zero, assembler) { 1686 ASSEMBLER_TEST_GENERATE(Udiv_zero, assembler) {
1683 if (TargetCPUFeatures::integer_division_supported()) { 1687 if (TargetCPUFeatures::integer_division_supported()) {
1684 __ mov(R0, Operand(27)); 1688 __ mov(R0, Operand(27));
1685 __ mov(R1, Operand(0)); 1689 __ mov(R1, Operand(0));
1686 __ udiv(R2, R0, R1); 1690 __ udiv(R2, R0, R1);
1687 __ mov(R0, Operand(R2)); 1691 __ mov(R0, Operand(R2));
1688 } else { 1692 } else {
1689 __ LoadImmediate(R0, 0); 1693 __ LoadImmediate(R0, 0);
1690 } 1694 }
1691 __ bx(LR); 1695 __ bx(LR);
1692 } 1696 }
1693 1697
1694 1698
1695 ASSEMBLER_TEST_RUN(Udiv_zero, test) { 1699 ASSEMBLER_TEST_RUN(Udiv_zero, test) {
1696 EXPECT(test != NULL); 1700 EXPECT(test != NULL);
1697 typedef int (*Tst)(); 1701 typedef int (*Tst)() DART_UNUSED;
1698 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1702 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1699 } 1703 }
1700 1704
1701 1705
1702 ASSEMBLER_TEST_GENERATE(Sdiv_zero, assembler) { 1706 ASSEMBLER_TEST_GENERATE(Sdiv_zero, assembler) {
1703 if (TargetCPUFeatures::integer_division_supported()) { 1707 if (TargetCPUFeatures::integer_division_supported()) {
1704 __ mov(R0, Operand(27)); 1708 __ mov(R0, Operand(27));
1705 __ mov(R1, Operand(0)); 1709 __ mov(R1, Operand(0));
1706 __ sdiv(R2, R0, R1); 1710 __ sdiv(R2, R0, R1);
1707 __ mov(R0, Operand(R2)); 1711 __ mov(R0, Operand(R2));
1708 } else { 1712 } else {
1709 __ LoadImmediate(R0, 0); 1713 __ LoadImmediate(R0, 0);
1710 } 1714 }
1711 __ bx(LR); 1715 __ bx(LR);
1712 } 1716 }
1713 1717
1714 1718
1715 ASSEMBLER_TEST_RUN(Sdiv_zero, test) { 1719 ASSEMBLER_TEST_RUN(Sdiv_zero, test) {
1716 EXPECT(test != NULL); 1720 EXPECT(test != NULL);
1717 typedef int (*Tst)(); 1721 typedef int (*Tst)() DART_UNUSED;
1718 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1722 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1719 } 1723 }
1720 1724
1721 1725
1722 ASSEMBLER_TEST_GENERATE(Udiv_corner, assembler) { 1726 ASSEMBLER_TEST_GENERATE(Udiv_corner, assembler) {
1723 if (TargetCPUFeatures::integer_division_supported()) { 1727 if (TargetCPUFeatures::integer_division_supported()) {
1724 __ LoadImmediate(R0, 0x80000000); 1728 __ LoadImmediate(R0, 0x80000000);
1725 __ LoadImmediate(R1, 0xffffffff); 1729 __ LoadImmediate(R1, 0xffffffff);
1726 __ udiv(R2, R0, R1); 1730 __ udiv(R2, R0, R1);
1727 __ mov(R0, Operand(R2)); 1731 __ mov(R0, Operand(R2));
1728 } else { 1732 } else {
1729 __ LoadImmediate(R0, 0); 1733 __ LoadImmediate(R0, 0);
1730 } 1734 }
1731 __ bx(LR); 1735 __ bx(LR);
1732 } 1736 }
1733 1737
1734 1738
1735 ASSEMBLER_TEST_RUN(Udiv_corner, test) { 1739 ASSEMBLER_TEST_RUN(Udiv_corner, test) {
1736 EXPECT(test != NULL); 1740 EXPECT(test != NULL);
1737 typedef int (*Tst)(); 1741 typedef int (*Tst)() DART_UNUSED;
1738 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1742 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1739 } 1743 }
1740 1744
1741 1745
1742 ASSEMBLER_TEST_GENERATE(Sdiv_corner, assembler) { 1746 ASSEMBLER_TEST_GENERATE(Sdiv_corner, assembler) {
1743 if (TargetCPUFeatures::integer_division_supported()) { 1747 if (TargetCPUFeatures::integer_division_supported()) {
1744 __ LoadImmediate(R0, 0x80000000); 1748 __ LoadImmediate(R0, 0x80000000);
1745 __ LoadImmediate(R1, 0xffffffff); 1749 __ LoadImmediate(R1, 0xffffffff);
1746 __ sdiv(R2, R0, R1); 1750 __ sdiv(R2, R0, R1);
1747 __ mov(R0, Operand(R2)); 1751 __ mov(R0, Operand(R2));
1748 } else { 1752 } else {
1749 __ LoadImmediate(R0, 0x80000000); 1753 __ LoadImmediate(R0, 0x80000000);
1750 } 1754 }
1751 __ bx(LR); 1755 __ bx(LR);
1752 } 1756 }
1753 1757
1754 1758
1755 ASSEMBLER_TEST_RUN(Sdiv_corner, test) { 1759 ASSEMBLER_TEST_RUN(Sdiv_corner, test) {
1756 EXPECT(test != NULL); 1760 EXPECT(test != NULL);
1757 typedef int (*Tst)(); 1761 typedef int (*Tst)() DART_UNUSED;
1758 EXPECT_EQ(static_cast<int32_t>(0x80000000), 1762 EXPECT_EQ(static_cast<int32_t>(0x80000000),
1759 EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1763 EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1760 } 1764 }
1761 1765
1762 1766
1763 ASSEMBLER_TEST_GENERATE(IntDiv_supported, assembler) { 1767 ASSEMBLER_TEST_GENERATE(IntDiv_supported, assembler) {
1764 #if defined(USING_SIMULATOR) 1768 #if defined(USING_SIMULATOR)
1765 bool orig = TargetCPUFeatures::integer_division_supported(); 1769 bool orig = TargetCPUFeatures::integer_division_supported();
1766 HostCPUFeatures::set_integer_division_supported(true); 1770 HostCPUFeatures::set_integer_division_supported(true);
1767 __ mov(R0, Operand(27)); 1771 __ mov(R0, Operand(27));
1768 __ mov(R1, Operand(9)); 1772 __ mov(R1, Operand(9));
1769 __ IntegerDivide(R0, R0, R1, D0, D1); 1773 __ IntegerDivide(R0, R0, R1, D0, D1);
1770 HostCPUFeatures::set_integer_division_supported(orig); 1774 HostCPUFeatures::set_integer_division_supported(orig);
1771 __ bx(LR); 1775 __ bx(LR);
1772 #else 1776 #else
1773 __ mov(R0, Operand(27)); 1777 __ mov(R0, Operand(27));
1774 __ mov(R1, Operand(9)); 1778 __ mov(R1, Operand(9));
1775 __ IntegerDivide(R0, R0, R1, D0, D1); 1779 __ IntegerDivide(R0, R0, R1, D0, D1);
1776 __ bx(LR); 1780 __ bx(LR);
1777 #endif 1781 #endif
1778 } 1782 }
1779 1783
1780 1784
1781 ASSEMBLER_TEST_RUN(IntDiv_supported, test) { 1785 ASSEMBLER_TEST_RUN(IntDiv_supported, test) {
1782 EXPECT(test != NULL); 1786 EXPECT(test != NULL);
1783 typedef int (*Tst)(); 1787 typedef int (*Tst)() DART_UNUSED;
1784 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1788 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1785 } 1789 }
1786 1790
1787 1791
1788 ASSEMBLER_TEST_GENERATE(IntDiv_unsupported, assembler) { 1792 ASSEMBLER_TEST_GENERATE(IntDiv_unsupported, assembler) {
1789 #if defined(USING_SIMULATOR) 1793 #if defined(USING_SIMULATOR)
1790 bool orig = TargetCPUFeatures::integer_division_supported(); 1794 bool orig = TargetCPUFeatures::integer_division_supported();
1791 HostCPUFeatures::set_integer_division_supported(false); 1795 HostCPUFeatures::set_integer_division_supported(false);
1792 __ mov(R0, Operand(27)); 1796 __ mov(R0, Operand(27));
1793 __ mov(R1, Operand(9)); 1797 __ mov(R1, Operand(9));
1794 __ IntegerDivide(R0, R0, R1, D0, D1); 1798 __ IntegerDivide(R0, R0, R1, D0, D1);
1795 HostCPUFeatures::set_integer_division_supported(orig); 1799 HostCPUFeatures::set_integer_division_supported(orig);
1796 __ bx(LR); 1800 __ bx(LR);
1797 #else 1801 #else
1798 __ mov(R0, Operand(27)); 1802 __ mov(R0, Operand(27));
1799 __ mov(R1, Operand(9)); 1803 __ mov(R1, Operand(9));
1800 __ IntegerDivide(R0, R0, R1, D0, D1); 1804 __ IntegerDivide(R0, R0, R1, D0, D1);
1801 __ bx(LR); 1805 __ bx(LR);
1802 #endif 1806 #endif
1803 } 1807 }
1804 1808
1805 1809
1806 ASSEMBLER_TEST_RUN(IntDiv_unsupported, test) { 1810 ASSEMBLER_TEST_RUN(IntDiv_unsupported, test) {
1807 EXPECT(test != NULL); 1811 EXPECT(test != NULL);
1808 typedef int (*Tst)(); 1812 typedef int (*Tst)() DART_UNUSED;
1809 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1813 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1810 } 1814 }
1811 1815
1812 1816
1813 ASSEMBLER_TEST_GENERATE(Muls, assembler) { 1817 ASSEMBLER_TEST_GENERATE(Muls, assembler) {
1814 __ mov(R0, Operand(3)); 1818 __ mov(R0, Operand(3));
1815 __ LoadImmediate(R1, -9); 1819 __ LoadImmediate(R1, -9);
1816 __ muls(R2, R0, R1); 1820 __ muls(R2, R0, R1);
1817 __ mov(R0, Operand(42), MI); 1821 __ mov(R0, Operand(42), MI);
1818 __ bx(LR); 1822 __ bx(LR);
1819 } 1823 }
1820 1824
1821 1825
1822 ASSEMBLER_TEST_RUN(Muls, test) { 1826 ASSEMBLER_TEST_RUN(Muls, test) {
1823 EXPECT(test != NULL); 1827 EXPECT(test != NULL);
1824 typedef int (*Tst)(); 1828 typedef int (*Tst)() DART_UNUSED;
1825 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1829 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1826 } 1830 }
1827 1831
1828 1832
1829 ASSEMBLER_TEST_GENERATE(Vaddqi8, assembler) { 1833 ASSEMBLER_TEST_GENERATE(Vaddqi8, assembler) {
1830 if (TargetCPUFeatures::neon_supported()) { 1834 if (TargetCPUFeatures::neon_supported()) {
1831 __ mov(R0, Operand(1)); 1835 __ mov(R0, Operand(1));
1832 __ vmovsr(S0, R0); 1836 __ vmovsr(S0, R0);
1833 __ mov(R0, Operand(2)); 1837 __ mov(R0, Operand(2));
1834 __ vmovsr(S1, R0); 1838 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
1858 __ bx(LR); 1862 __ bx(LR);
1859 } else { 1863 } else {
1860 __ LoadImmediate(R0, 36); 1864 __ LoadImmediate(R0, 36);
1861 __ bx(LR); 1865 __ bx(LR);
1862 } 1866 }
1863 } 1867 }
1864 1868
1865 1869
1866 ASSEMBLER_TEST_RUN(Vaddqi8, test) { 1870 ASSEMBLER_TEST_RUN(Vaddqi8, test) {
1867 EXPECT(test != NULL); 1871 EXPECT(test != NULL);
1868 typedef int (*Tst)(); 1872 typedef int (*Tst)() DART_UNUSED;
1869 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1873 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1870 } 1874 }
1871 1875
1872 1876
1873 ASSEMBLER_TEST_GENERATE(Vaddqi16, assembler) { 1877 ASSEMBLER_TEST_GENERATE(Vaddqi16, assembler) {
1874 if (TargetCPUFeatures::neon_supported()) { 1878 if (TargetCPUFeatures::neon_supported()) {
1875 __ mov(R0, Operand(1)); 1879 __ mov(R0, Operand(1));
1876 __ vmovsr(S0, R0); 1880 __ vmovsr(S0, R0);
1877 __ mov(R0, Operand(2)); 1881 __ mov(R0, Operand(2));
1878 __ vmovsr(S1, R0); 1882 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
1902 __ bx(LR); 1906 __ bx(LR);
1903 } else { 1907 } else {
1904 __ LoadImmediate(R0, 36); 1908 __ LoadImmediate(R0, 36);
1905 __ bx(LR); 1909 __ bx(LR);
1906 } 1910 }
1907 } 1911 }
1908 1912
1909 1913
1910 ASSEMBLER_TEST_RUN(Vaddqi16, test) { 1914 ASSEMBLER_TEST_RUN(Vaddqi16, test) {
1911 EXPECT(test != NULL); 1915 EXPECT(test != NULL);
1912 typedef int (*Tst)(); 1916 typedef int (*Tst)() DART_UNUSED;
1913 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1917 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1914 } 1918 }
1915 1919
1916 1920
1917 ASSEMBLER_TEST_GENERATE(Vaddqi32, assembler) { 1921 ASSEMBLER_TEST_GENERATE(Vaddqi32, assembler) {
1918 if (TargetCPUFeatures::neon_supported()) { 1922 if (TargetCPUFeatures::neon_supported()) {
1919 __ mov(R0, Operand(1)); 1923 __ mov(R0, Operand(1));
1920 __ vmovsr(S0, R0); 1924 __ vmovsr(S0, R0);
1921 __ mov(R0, Operand(2)); 1925 __ mov(R0, Operand(2));
1922 __ vmovsr(S1, R0); 1926 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
1946 __ bx(LR); 1950 __ bx(LR);
1947 } else { 1951 } else {
1948 __ LoadImmediate(R0, 36); 1952 __ LoadImmediate(R0, 36);
1949 __ bx(LR); 1953 __ bx(LR);
1950 } 1954 }
1951 } 1955 }
1952 1956
1953 1957
1954 ASSEMBLER_TEST_RUN(Vaddqi32, test) { 1958 ASSEMBLER_TEST_RUN(Vaddqi32, test) {
1955 EXPECT(test != NULL); 1959 EXPECT(test != NULL);
1956 typedef int (*Tst)(); 1960 typedef int (*Tst)() DART_UNUSED;
1957 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1961 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1958 } 1962 }
1959 1963
1960 1964
1961 ASSEMBLER_TEST_GENERATE(Vaddqi64, assembler) { 1965 ASSEMBLER_TEST_GENERATE(Vaddqi64, assembler) {
1962 if (TargetCPUFeatures::neon_supported()) { 1966 if (TargetCPUFeatures::neon_supported()) {
1963 __ mov(R0, Operand(1)); 1967 __ mov(R0, Operand(1));
1964 __ vmovsr(S0, R0); 1968 __ vmovsr(S0, R0);
1965 __ mov(R0, Operand(2)); 1969 __ mov(R0, Operand(2));
1966 __ vmovsr(S2, R0); 1970 __ vmovsr(S2, R0);
(...skipping 11 matching lines...) Expand all
1978 __ bx(LR); 1982 __ bx(LR);
1979 } else { 1983 } else {
1980 __ LoadImmediate(R0, 10); 1984 __ LoadImmediate(R0, 10);
1981 __ bx(LR); 1985 __ bx(LR);
1982 } 1986 }
1983 } 1987 }
1984 1988
1985 1989
1986 ASSEMBLER_TEST_RUN(Vaddqi64, test) { 1990 ASSEMBLER_TEST_RUN(Vaddqi64, test) {
1987 EXPECT(test != NULL); 1991 EXPECT(test != NULL);
1988 typedef int (*Tst)(); 1992 typedef int (*Tst)() DART_UNUSED;
1989 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 1993 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
1990 } 1994 }
1991 1995
1992 1996
1993 ASSEMBLER_TEST_GENERATE(Vshlqu64, assembler) { 1997 ASSEMBLER_TEST_GENERATE(Vshlqu64, assembler) {
1994 if (TargetCPUFeatures::neon_supported()) { 1998 if (TargetCPUFeatures::neon_supported()) {
1995 Label fail; 1999 Label fail;
1996 __ LoadImmediate(R1, 21); 2000 __ LoadImmediate(R1, 21);
1997 __ LoadImmediate(R0, 1); 2001 __ LoadImmediate(R0, 1);
1998 __ vmovsr(S0, R1); 2002 __ vmovsr(S0, R1);
(...skipping 17 matching lines...) Expand all
2016 __ bx(LR); 2020 __ bx(LR);
2017 } else { 2021 } else {
2018 __ LoadImmediate(R0, 1); 2022 __ LoadImmediate(R0, 1);
2019 __ bx(LR); 2023 __ bx(LR);
2020 } 2024 }
2021 } 2025 }
2022 2026
2023 2027
2024 ASSEMBLER_TEST_RUN(Vshlqu64, test) { 2028 ASSEMBLER_TEST_RUN(Vshlqu64, test) {
2025 EXPECT(test != NULL); 2029 EXPECT(test != NULL);
2026 typedef int (*Tst)(); 2030 typedef int (*Tst)() DART_UNUSED;
2027 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2031 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2028 } 2032 }
2029 2033
2030 2034
2031 ASSEMBLER_TEST_GENERATE(Vshlqi64, assembler) { 2035 ASSEMBLER_TEST_GENERATE(Vshlqi64, assembler) {
2032 if (TargetCPUFeatures::neon_supported()) { 2036 if (TargetCPUFeatures::neon_supported()) {
2033 Label fail; 2037 Label fail;
2034 __ LoadImmediate(R1, -84); 2038 __ LoadImmediate(R1, -84);
2035 __ LoadImmediate(R0, -1); 2039 __ LoadImmediate(R0, -1);
2036 __ vmovdrr(D0, R1, R0); 2040 __ vmovdrr(D0, R1, R0);
(...skipping 17 matching lines...) Expand all
2054 __ bx(LR); 2058 __ bx(LR);
2055 } else { 2059 } else {
2056 __ LoadImmediate(R0, 1); 2060 __ LoadImmediate(R0, 1);
2057 __ bx(LR); 2061 __ bx(LR);
2058 } 2062 }
2059 } 2063 }
2060 2064
2061 2065
2062 ASSEMBLER_TEST_RUN(Vshlqi64, test) { 2066 ASSEMBLER_TEST_RUN(Vshlqi64, test) {
2063 EXPECT(test != NULL); 2067 EXPECT(test != NULL);
2064 typedef int (*Tst)(); 2068 typedef int (*Tst)() DART_UNUSED;
2065 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2069 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2066 } 2070 }
2067 2071
2068 2072
2069 ASSEMBLER_TEST_GENERATE(Mint_shl_ok, assembler) { 2073 ASSEMBLER_TEST_GENERATE(Mint_shl_ok, assembler) {
2070 if (TargetCPUFeatures::neon_supported()) { 2074 if (TargetCPUFeatures::neon_supported()) {
2071 const QRegister value = Q0; 2075 const QRegister value = Q0;
2072 const QRegister temp = Q1; 2076 const QRegister temp = Q1;
2073 const QRegister out = Q2; 2077 const QRegister out = Q2;
2074 const Register shift = R1; 2078 const Register shift = R1;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 __ LoadImmediate(R0, 0); 2115 __ LoadImmediate(R0, 0);
2112 } else { 2116 } else {
2113 __ LoadImmediate(R0, 1); 2117 __ LoadImmediate(R0, 1);
2114 } 2118 }
2115 __ bx(LR); 2119 __ bx(LR);
2116 } 2120 }
2117 2121
2118 2122
2119 ASSEMBLER_TEST_RUN(Mint_shl_ok, test) { 2123 ASSEMBLER_TEST_RUN(Mint_shl_ok, test) {
2120 EXPECT(test != NULL); 2124 EXPECT(test != NULL);
2121 typedef int (*Tst)(); 2125 typedef int (*Tst)() DART_UNUSED;
2122 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2126 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2123 } 2127 }
2124 2128
2125 2129
2126 ASSEMBLER_TEST_GENERATE(Mint_shl_overflow, assembler) { 2130 ASSEMBLER_TEST_GENERATE(Mint_shl_overflow, assembler) {
2127 if (TargetCPUFeatures::neon_supported()) { 2131 if (TargetCPUFeatures::neon_supported()) {
2128 const QRegister value = Q0; 2132 const QRegister value = Q0;
2129 const QRegister temp = Q1; 2133 const QRegister temp = Q1;
2130 const QRegister out = Q2; 2134 const QRegister out = Q2;
2131 const Register shift = R1; 2135 const Register shift = R1;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2168 __ LoadImmediate(R0, 1); 2172 __ LoadImmediate(R0, 1);
2169 } else { 2173 } else {
2170 __ LoadImmediate(R0, 1); 2174 __ LoadImmediate(R0, 1);
2171 } 2175 }
2172 __ bx(LR); 2176 __ bx(LR);
2173 } 2177 }
2174 2178
2175 2179
2176 ASSEMBLER_TEST_RUN(Mint_shl_overflow, test) { 2180 ASSEMBLER_TEST_RUN(Mint_shl_overflow, test) {
2177 EXPECT(test != NULL); 2181 EXPECT(test != NULL);
2178 typedef int (*Tst)(); 2182 typedef int (*Tst)() DART_UNUSED;
2179 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2183 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2180 } 2184 }
2181 2185
2182 2186
2183 ASSEMBLER_TEST_GENERATE(Vsubqi8, assembler) { 2187 ASSEMBLER_TEST_GENERATE(Vsubqi8, assembler) {
2184 if (TargetCPUFeatures::neon_supported()) { 2188 if (TargetCPUFeatures::neon_supported()) {
2185 __ mov(R0, Operand(1)); 2189 __ mov(R0, Operand(1));
2186 __ vmovsr(S0, R0); 2190 __ vmovsr(S0, R0);
2187 __ mov(R0, Operand(2)); 2191 __ mov(R0, Operand(2));
2188 __ vmovsr(S1, R0); 2192 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2212 __ bx(LR); 2216 __ bx(LR);
2213 } else { 2217 } else {
2214 __ LoadImmediate(R0, 10); 2218 __ LoadImmediate(R0, 10);
2215 __ bx(LR); 2219 __ bx(LR);
2216 } 2220 }
2217 } 2221 }
2218 2222
2219 2223
2220 ASSEMBLER_TEST_RUN(Vsubqi8, test) { 2224 ASSEMBLER_TEST_RUN(Vsubqi8, test) {
2221 EXPECT(test != NULL); 2225 EXPECT(test != NULL);
2222 typedef int (*Tst)(); 2226 typedef int (*Tst)() DART_UNUSED;
2223 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2227 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2224 } 2228 }
2225 2229
2226 2230
2227 ASSEMBLER_TEST_GENERATE(Vsubqi16, assembler) { 2231 ASSEMBLER_TEST_GENERATE(Vsubqi16, assembler) {
2228 if (TargetCPUFeatures::neon_supported()) { 2232 if (TargetCPUFeatures::neon_supported()) {
2229 __ mov(R0, Operand(1)); 2233 __ mov(R0, Operand(1));
2230 __ vmovsr(S0, R0); 2234 __ vmovsr(S0, R0);
2231 __ mov(R0, Operand(2)); 2235 __ mov(R0, Operand(2));
2232 __ vmovsr(S1, R0); 2236 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2256 __ bx(LR); 2260 __ bx(LR);
2257 } else { 2261 } else {
2258 __ LoadImmediate(R0, 10); 2262 __ LoadImmediate(R0, 10);
2259 __ bx(LR); 2263 __ bx(LR);
2260 } 2264 }
2261 } 2265 }
2262 2266
2263 2267
2264 ASSEMBLER_TEST_RUN(Vsubqi16, test) { 2268 ASSEMBLER_TEST_RUN(Vsubqi16, test) {
2265 EXPECT(test != NULL); 2269 EXPECT(test != NULL);
2266 typedef int (*Tst)(); 2270 typedef int (*Tst)() DART_UNUSED;
2267 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2271 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2268 } 2272 }
2269 2273
2270 2274
2271 ASSEMBLER_TEST_GENERATE(Vsubqi32, assembler) { 2275 ASSEMBLER_TEST_GENERATE(Vsubqi32, assembler) {
2272 if (TargetCPUFeatures::neon_supported()) { 2276 if (TargetCPUFeatures::neon_supported()) {
2273 __ mov(R0, Operand(1)); 2277 __ mov(R0, Operand(1));
2274 __ vmovsr(S0, R0); 2278 __ vmovsr(S0, R0);
2275 __ mov(R0, Operand(2)); 2279 __ mov(R0, Operand(2));
2276 __ vmovsr(S1, R0); 2280 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2300 __ bx(LR); 2304 __ bx(LR);
2301 } else { 2305 } else {
2302 __ LoadImmediate(R0, 10); 2306 __ LoadImmediate(R0, 10);
2303 __ bx(LR); 2307 __ bx(LR);
2304 } 2308 }
2305 } 2309 }
2306 2310
2307 2311
2308 ASSEMBLER_TEST_RUN(Vsubqi32, test) { 2312 ASSEMBLER_TEST_RUN(Vsubqi32, test) {
2309 EXPECT(test != NULL); 2313 EXPECT(test != NULL);
2310 typedef int (*Tst)(); 2314 typedef int (*Tst)() DART_UNUSED;
2311 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2315 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2312 } 2316 }
2313 2317
2314 2318
2315 ASSEMBLER_TEST_GENERATE(Vsubqi64, assembler) { 2319 ASSEMBLER_TEST_GENERATE(Vsubqi64, assembler) {
2316 if (TargetCPUFeatures::neon_supported()) { 2320 if (TargetCPUFeatures::neon_supported()) {
2317 __ mov(R0, Operand(1)); 2321 __ mov(R0, Operand(1));
2318 __ vmovsr(S0, R0); 2322 __ vmovsr(S0, R0);
2319 __ mov(R0, Operand(2)); 2323 __ mov(R0, Operand(2));
2320 __ vmovsr(S2, R0); 2324 __ vmovsr(S2, R0);
(...skipping 11 matching lines...) Expand all
2332 __ bx(LR); 2336 __ bx(LR);
2333 } else { 2337 } else {
2334 __ LoadImmediate(R0, 3); 2338 __ LoadImmediate(R0, 3);
2335 __ bx(LR); 2339 __ bx(LR);
2336 } 2340 }
2337 } 2341 }
2338 2342
2339 2343
2340 ASSEMBLER_TEST_RUN(Vsubqi64, test) { 2344 ASSEMBLER_TEST_RUN(Vsubqi64, test) {
2341 EXPECT(test != NULL); 2345 EXPECT(test != NULL);
2342 typedef int (*Tst)(); 2346 typedef int (*Tst)() DART_UNUSED;
2343 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2347 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2344 } 2348 }
2345 2349
2346 2350
2347 ASSEMBLER_TEST_GENERATE(Vmulqi8, assembler) { 2351 ASSEMBLER_TEST_GENERATE(Vmulqi8, assembler) {
2348 if (TargetCPUFeatures::neon_supported()) { 2352 if (TargetCPUFeatures::neon_supported()) {
2349 __ mov(R0, Operand(1)); 2353 __ mov(R0, Operand(1));
2350 __ vmovsr(S0, R0); 2354 __ vmovsr(S0, R0);
2351 __ mov(R0, Operand(2)); 2355 __ mov(R0, Operand(2));
2352 __ vmovsr(S1, R0); 2356 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2376 __ bx(LR); 2380 __ bx(LR);
2377 } else { 2381 } else {
2378 __ LoadImmediate(R0, 70); 2382 __ LoadImmediate(R0, 70);
2379 __ bx(LR); 2383 __ bx(LR);
2380 } 2384 }
2381 } 2385 }
2382 2386
2383 2387
2384 ASSEMBLER_TEST_RUN(Vmulqi8, test) { 2388 ASSEMBLER_TEST_RUN(Vmulqi8, test) {
2385 EXPECT(test != NULL); 2389 EXPECT(test != NULL);
2386 typedef int (*Tst)(); 2390 typedef int (*Tst)() DART_UNUSED;
2387 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2391 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2388 } 2392 }
2389 2393
2390 2394
2391 ASSEMBLER_TEST_GENERATE(Vmulqi16, assembler) { 2395 ASSEMBLER_TEST_GENERATE(Vmulqi16, assembler) {
2392 if (TargetCPUFeatures::neon_supported()) { 2396 if (TargetCPUFeatures::neon_supported()) {
2393 __ mov(R0, Operand(1)); 2397 __ mov(R0, Operand(1));
2394 __ vmovsr(S0, R0); 2398 __ vmovsr(S0, R0);
2395 __ mov(R0, Operand(2)); 2399 __ mov(R0, Operand(2));
2396 __ vmovsr(S1, R0); 2400 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2420 __ bx(LR); 2424 __ bx(LR);
2421 } else { 2425 } else {
2422 __ LoadImmediate(R0, 70); 2426 __ LoadImmediate(R0, 70);
2423 __ bx(LR); 2427 __ bx(LR);
2424 } 2428 }
2425 } 2429 }
2426 2430
2427 2431
2428 ASSEMBLER_TEST_RUN(Vmulqi16, test) { 2432 ASSEMBLER_TEST_RUN(Vmulqi16, test) {
2429 EXPECT(test != NULL); 2433 EXPECT(test != NULL);
2430 typedef int (*Tst)(); 2434 typedef int (*Tst)() DART_UNUSED;
2431 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2435 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2432 } 2436 }
2433 2437
2434 2438
2435 ASSEMBLER_TEST_GENERATE(Vmulqi32, assembler) { 2439 ASSEMBLER_TEST_GENERATE(Vmulqi32, assembler) {
2436 if (TargetCPUFeatures::neon_supported()) { 2440 if (TargetCPUFeatures::neon_supported()) {
2437 __ mov(R0, Operand(1)); 2441 __ mov(R0, Operand(1));
2438 __ vmovsr(S0, R0); 2442 __ vmovsr(S0, R0);
2439 __ mov(R0, Operand(2)); 2443 __ mov(R0, Operand(2));
2440 __ vmovsr(S1, R0); 2444 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
2464 __ bx(LR); 2468 __ bx(LR);
2465 } else { 2469 } else {
2466 __ LoadImmediate(R0, 70); 2470 __ LoadImmediate(R0, 70);
2467 __ bx(LR); 2471 __ bx(LR);
2468 } 2472 }
2469 } 2473 }
2470 2474
2471 2475
2472 ASSEMBLER_TEST_RUN(Vmulqi32, test) { 2476 ASSEMBLER_TEST_RUN(Vmulqi32, test) {
2473 EXPECT(test != NULL); 2477 EXPECT(test != NULL);
2474 typedef int (*Tst)(); 2478 typedef int (*Tst)() DART_UNUSED;
2475 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2479 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2476 } 2480 }
2477 2481
2478 2482
2479 ASSEMBLER_TEST_GENERATE(Vaddqs, assembler) { 2483 ASSEMBLER_TEST_GENERATE(Vaddqs, assembler) {
2480 if (TargetCPUFeatures::neon_supported()) { 2484 if (TargetCPUFeatures::neon_supported()) {
2481 __ LoadSImmediate(S0, 1.0); 2485 __ LoadSImmediate(S0, 1.0);
2482 __ LoadSImmediate(S1, 2.0); 2486 __ LoadSImmediate(S1, 2.0);
2483 __ LoadSImmediate(S2, 3.0); 2487 __ LoadSImmediate(S2, 3.0);
2484 __ LoadSImmediate(S3, 4.0); 2488 __ LoadSImmediate(S3, 4.0);
(...skipping 14 matching lines...) Expand all
2499 __ bx(LR); 2503 __ bx(LR);
2500 } else { 2504 } else {
2501 __ LoadImmediate(R0, 36); 2505 __ LoadImmediate(R0, 36);
2502 __ bx(LR); 2506 __ bx(LR);
2503 } 2507 }
2504 } 2508 }
2505 2509
2506 2510
2507 ASSEMBLER_TEST_RUN(Vaddqs, test) { 2511 ASSEMBLER_TEST_RUN(Vaddqs, test) {
2508 EXPECT(test != NULL); 2512 EXPECT(test != NULL);
2509 typedef int (*Tst)(); 2513 typedef int (*Tst)() DART_UNUSED;
2510 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2514 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2511 } 2515 }
2512 2516
2513 2517
2514 ASSEMBLER_TEST_GENERATE(Vsubqs, assembler) { 2518 ASSEMBLER_TEST_GENERATE(Vsubqs, assembler) {
2515 if (TargetCPUFeatures::neon_supported()) { 2519 if (TargetCPUFeatures::neon_supported()) {
2516 __ LoadSImmediate(S0, 1.0); 2520 __ LoadSImmediate(S0, 1.0);
2517 __ LoadSImmediate(S1, 2.0); 2521 __ LoadSImmediate(S1, 2.0);
2518 __ LoadSImmediate(S2, 3.0); 2522 __ LoadSImmediate(S2, 3.0);
2519 __ LoadSImmediate(S3, 4.0); 2523 __ LoadSImmediate(S3, 4.0);
(...skipping 14 matching lines...) Expand all
2534 __ bx(LR); 2538 __ bx(LR);
2535 } else { 2539 } else {
2536 __ LoadImmediate(R0, 10); 2540 __ LoadImmediate(R0, 10);
2537 __ bx(LR); 2541 __ bx(LR);
2538 } 2542 }
2539 } 2543 }
2540 2544
2541 2545
2542 ASSEMBLER_TEST_RUN(Vsubqs, test) { 2546 ASSEMBLER_TEST_RUN(Vsubqs, test) {
2543 EXPECT(test != NULL); 2547 EXPECT(test != NULL);
2544 typedef int (*Tst)(); 2548 typedef int (*Tst)() DART_UNUSED;
2545 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2549 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2546 } 2550 }
2547 2551
2548 2552
2549 ASSEMBLER_TEST_GENERATE(Vmulqs, assembler) { 2553 ASSEMBLER_TEST_GENERATE(Vmulqs, assembler) {
2550 if (TargetCPUFeatures::neon_supported()) { 2554 if (TargetCPUFeatures::neon_supported()) {
2551 __ LoadSImmediate(S0, 1.0); 2555 __ LoadSImmediate(S0, 1.0);
2552 __ LoadSImmediate(S1, 2.0); 2556 __ LoadSImmediate(S1, 2.0);
2553 __ LoadSImmediate(S2, 3.0); 2557 __ LoadSImmediate(S2, 3.0);
2554 __ LoadSImmediate(S3, 4.0); 2558 __ LoadSImmediate(S3, 4.0);
(...skipping 14 matching lines...) Expand all
2569 __ bx(LR); 2573 __ bx(LR);
2570 } else { 2574 } else {
2571 __ LoadImmediate(R0, 70); 2575 __ LoadImmediate(R0, 70);
2572 __ bx(LR); 2576 __ bx(LR);
2573 } 2577 }
2574 } 2578 }
2575 2579
2576 2580
2577 ASSEMBLER_TEST_RUN(Vmulqs, test) { 2581 ASSEMBLER_TEST_RUN(Vmulqs, test) {
2578 EXPECT(test != NULL); 2582 EXPECT(test != NULL);
2579 typedef int (*Tst)(); 2583 typedef int (*Tst)() DART_UNUSED;
2580 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2584 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2581 } 2585 }
2582 2586
2583 2587
2584 ASSEMBLER_TEST_GENERATE(VtblX, assembler) { 2588 ASSEMBLER_TEST_GENERATE(VtblX, assembler) {
2585 if (TargetCPUFeatures::neon_supported()) { 2589 if (TargetCPUFeatures::neon_supported()) {
2586 // Index. 2590 // Index.
2587 __ LoadImmediate(R0, 0x03020100); 2591 __ LoadImmediate(R0, 0x03020100);
2588 __ vmovsr(S0, R0); 2592 __ vmovsr(S0, R0);
2589 __ vmovsr(S1, R0); 2593 __ vmovsr(S1, R0);
(...skipping 22 matching lines...) Expand all
2612 __ bx(LR); 2616 __ bx(LR);
2613 } else { 2617 } else {
2614 __ LoadImmediate(R0, 42); 2618 __ LoadImmediate(R0, 42);
2615 __ bx(LR); 2619 __ bx(LR);
2616 } 2620 }
2617 } 2621 }
2618 2622
2619 2623
2620 ASSEMBLER_TEST_RUN(VtblX, test) { 2624 ASSEMBLER_TEST_RUN(VtblX, test) {
2621 EXPECT(test != NULL); 2625 EXPECT(test != NULL);
2622 typedef int (*Tst)(); 2626 typedef int (*Tst)() DART_UNUSED;
2623 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2627 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2624 } 2628 }
2625 2629
2626 2630
2627 ASSEMBLER_TEST_GENERATE(VtblY, assembler) { 2631 ASSEMBLER_TEST_GENERATE(VtblY, assembler) {
2628 if (TargetCPUFeatures::neon_supported()) { 2632 if (TargetCPUFeatures::neon_supported()) {
2629 // Index. 2633 // Index.
2630 __ LoadImmediate(R0, 0x07060504); 2634 __ LoadImmediate(R0, 0x07060504);
2631 __ vmovsr(S0, R0); 2635 __ vmovsr(S0, R0);
2632 __ vmovsr(S1, R0); 2636 __ vmovsr(S1, R0);
(...skipping 22 matching lines...) Expand all
2655 __ bx(LR); 2659 __ bx(LR);
2656 } else { 2660 } else {
2657 __ LoadImmediate(R0, 42); 2661 __ LoadImmediate(R0, 42);
2658 __ bx(LR); 2662 __ bx(LR);
2659 } 2663 }
2660 } 2664 }
2661 2665
2662 2666
2663 ASSEMBLER_TEST_RUN(VtblY, test) { 2667 ASSEMBLER_TEST_RUN(VtblY, test) {
2664 EXPECT(test != NULL); 2668 EXPECT(test != NULL);
2665 typedef int (*Tst)(); 2669 typedef int (*Tst)() DART_UNUSED;
2666 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2670 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2667 } 2671 }
2668 2672
2669 2673
2670 ASSEMBLER_TEST_GENERATE(VtblZ, assembler) { 2674 ASSEMBLER_TEST_GENERATE(VtblZ, assembler) {
2671 if (TargetCPUFeatures::neon_supported()) { 2675 if (TargetCPUFeatures::neon_supported()) {
2672 // Index. 2676 // Index.
2673 __ LoadImmediate(R0, 0x0b0a0908); 2677 __ LoadImmediate(R0, 0x0b0a0908);
2674 __ vmovsr(S0, R0); 2678 __ vmovsr(S0, R0);
2675 __ vmovsr(S1, R0); 2679 __ vmovsr(S1, R0);
(...skipping 22 matching lines...) Expand all
2698 __ bx(LR); 2702 __ bx(LR);
2699 } else { 2703 } else {
2700 __ LoadImmediate(R0, 42); 2704 __ LoadImmediate(R0, 42);
2701 __ bx(LR); 2705 __ bx(LR);
2702 } 2706 }
2703 } 2707 }
2704 2708
2705 2709
2706 ASSEMBLER_TEST_RUN(VtblZ, test) { 2710 ASSEMBLER_TEST_RUN(VtblZ, test) {
2707 EXPECT(test != NULL); 2711 EXPECT(test != NULL);
2708 typedef int (*Tst)(); 2712 typedef int (*Tst)() DART_UNUSED;
2709 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2713 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2710 } 2714 }
2711 2715
2712 2716
2713 ASSEMBLER_TEST_GENERATE(VtblW, assembler) { 2717 ASSEMBLER_TEST_GENERATE(VtblW, assembler) {
2714 if (TargetCPUFeatures::neon_supported()) { 2718 if (TargetCPUFeatures::neon_supported()) {
2715 // Index. 2719 // Index.
2716 __ LoadImmediate(R0, 0x0f0e0d0c); 2720 __ LoadImmediate(R0, 0x0f0e0d0c);
2717 __ vmovsr(S0, R0); 2721 __ vmovsr(S0, R0);
2718 __ vmovsr(S1, R0); 2722 __ vmovsr(S1, R0);
(...skipping 22 matching lines...) Expand all
2741 __ bx(LR); 2745 __ bx(LR);
2742 } else { 2746 } else {
2743 __ LoadImmediate(R0, 42); 2747 __ LoadImmediate(R0, 42);
2744 __ bx(LR); 2748 __ bx(LR);
2745 } 2749 }
2746 } 2750 }
2747 2751
2748 2752
2749 ASSEMBLER_TEST_RUN(VtblW, test) { 2753 ASSEMBLER_TEST_RUN(VtblW, test) {
2750 EXPECT(test != NULL); 2754 EXPECT(test != NULL);
2751 typedef int (*Tst)(); 2755 typedef int (*Tst)() DART_UNUSED;
2752 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2756 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2753 } 2757 }
2754 2758
2755 2759
2756 ASSEMBLER_TEST_GENERATE(Veorq, assembler) { 2760 ASSEMBLER_TEST_GENERATE(Veorq, assembler) {
2757 if (TargetCPUFeatures::neon_supported()) { 2761 if (TargetCPUFeatures::neon_supported()) {
2758 // Q0 2762 // Q0
2759 __ LoadImmediate(R0, 0xaaaaaaab); 2763 __ LoadImmediate(R0, 0xaaaaaaab);
2760 __ vmovsr(S0, R0); 2764 __ vmovsr(S0, R0);
2761 __ vmovsr(S1, R0); 2765 __ vmovsr(S1, R0);
(...skipping 21 matching lines...) Expand all
2783 __ bx(LR); 2787 __ bx(LR);
2784 } else { 2788 } else {
2785 __ LoadImmediate(R0, -8); 2789 __ LoadImmediate(R0, -8);
2786 __ bx(LR); 2790 __ bx(LR);
2787 } 2791 }
2788 } 2792 }
2789 2793
2790 2794
2791 ASSEMBLER_TEST_RUN(Veorq, test) { 2795 ASSEMBLER_TEST_RUN(Veorq, test) {
2792 EXPECT(test != NULL); 2796 EXPECT(test != NULL);
2793 typedef int (*Tst)(); 2797 typedef int (*Tst)() DART_UNUSED;
2794 EXPECT_EQ(-8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2798 EXPECT_EQ(-8, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2795 } 2799 }
2796 2800
2797 2801
2798 ASSEMBLER_TEST_GENERATE(Vornq, assembler) { 2802 ASSEMBLER_TEST_GENERATE(Vornq, assembler) {
2799 if (TargetCPUFeatures::neon_supported()) { 2803 if (TargetCPUFeatures::neon_supported()) {
2800 // Q0 2804 // Q0
2801 __ LoadImmediate(R0, 0xfffffff0); 2805 __ LoadImmediate(R0, 0xfffffff0);
2802 __ vmovsr(S0, R0); 2806 __ vmovsr(S0, R0);
2803 __ vmovsr(S1, R0); 2807 __ vmovsr(S1, R0);
(...skipping 21 matching lines...) Expand all
2825 __ bx(LR); 2829 __ bx(LR);
2826 } else { 2830 } else {
2827 __ LoadImmediate(R0, 60); 2831 __ LoadImmediate(R0, 60);
2828 __ bx(LR); 2832 __ bx(LR);
2829 } 2833 }
2830 } 2834 }
2831 2835
2832 2836
2833 ASSEMBLER_TEST_RUN(Vornq, test) { 2837 ASSEMBLER_TEST_RUN(Vornq, test) {
2834 EXPECT(test != NULL); 2838 EXPECT(test != NULL);
2835 typedef int (*Tst)(); 2839 typedef int (*Tst)() DART_UNUSED;
2836 EXPECT_EQ(60, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2840 EXPECT_EQ(60, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2837 } 2841 }
2838 2842
2839 2843
2840 ASSEMBLER_TEST_GENERATE(Vorrq, assembler) { 2844 ASSEMBLER_TEST_GENERATE(Vorrq, assembler) {
2841 if (TargetCPUFeatures::neon_supported()) { 2845 if (TargetCPUFeatures::neon_supported()) {
2842 // Q0 2846 // Q0
2843 __ LoadImmediate(R0, 0xaaaaaaaa); 2847 __ LoadImmediate(R0, 0xaaaaaaaa);
2844 __ vmovsr(S0, R0); 2848 __ vmovsr(S0, R0);
2845 __ vmovsr(S1, R0); 2849 __ vmovsr(S1, R0);
(...skipping 21 matching lines...) Expand all
2867 __ bx(LR); 2871 __ bx(LR);
2868 } else { 2872 } else {
2869 __ LoadImmediate(R0, -4); 2873 __ LoadImmediate(R0, -4);
2870 __ bx(LR); 2874 __ bx(LR);
2871 } 2875 }
2872 } 2876 }
2873 2877
2874 2878
2875 ASSEMBLER_TEST_RUN(Vorrq, test) { 2879 ASSEMBLER_TEST_RUN(Vorrq, test) {
2876 EXPECT(test != NULL); 2880 EXPECT(test != NULL);
2877 typedef int (*Tst)(); 2881 typedef int (*Tst)() DART_UNUSED;
2878 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2882 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2879 } 2883 }
2880 2884
2881 2885
2882 ASSEMBLER_TEST_GENERATE(Vandq, assembler) { 2886 ASSEMBLER_TEST_GENERATE(Vandq, assembler) {
2883 if (TargetCPUFeatures::neon_supported()) { 2887 if (TargetCPUFeatures::neon_supported()) {
2884 // Q0 2888 // Q0
2885 __ LoadImmediate(R0, 0xaaaaaaab); 2889 __ LoadImmediate(R0, 0xaaaaaaab);
2886 __ vmovsr(S0, R0); 2890 __ vmovsr(S0, R0);
2887 __ vmovsr(S1, R0); 2891 __ vmovsr(S1, R0);
(...skipping 21 matching lines...) Expand all
2909 __ bx(LR); 2913 __ bx(LR);
2910 } else { 2914 } else {
2911 __ LoadImmediate(R0, 4); 2915 __ LoadImmediate(R0, 4);
2912 __ bx(LR); 2916 __ bx(LR);
2913 } 2917 }
2914 } 2918 }
2915 2919
2916 2920
2917 ASSEMBLER_TEST_RUN(Vandq, test) { 2921 ASSEMBLER_TEST_RUN(Vandq, test) {
2918 EXPECT(test != NULL); 2922 EXPECT(test != NULL);
2919 typedef int (*Tst)(); 2923 typedef int (*Tst)() DART_UNUSED;
2920 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2924 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2921 } 2925 }
2922 2926
2923 2927
2924 ASSEMBLER_TEST_GENERATE(Vmovq, assembler) { 2928 ASSEMBLER_TEST_GENERATE(Vmovq, assembler) {
2925 if (TargetCPUFeatures::neon_supported()) { 2929 if (TargetCPUFeatures::neon_supported()) {
2926 // Q0 2930 // Q0
2927 __ LoadSImmediate(S0, 1.0); 2931 __ LoadSImmediate(S0, 1.0);
2928 __ vmovs(S1, S0); 2932 __ vmovs(S1, S0);
2929 __ vmovs(S2, S0); 2933 __ vmovs(S2, S0);
(...skipping 17 matching lines...) Expand all
2947 __ bx(LR); 2951 __ bx(LR);
2948 } else { 2952 } else {
2949 __ LoadImmediate(R0, 4); 2953 __ LoadImmediate(R0, 4);
2950 __ bx(LR); 2954 __ bx(LR);
2951 } 2955 }
2952 } 2956 }
2953 2957
2954 2958
2955 ASSEMBLER_TEST_RUN(Vmovq, test) { 2959 ASSEMBLER_TEST_RUN(Vmovq, test) {
2956 EXPECT(test != NULL); 2960 EXPECT(test != NULL);
2957 typedef int (*Tst)(); 2961 typedef int (*Tst)() DART_UNUSED;
2958 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2962 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2959 } 2963 }
2960 2964
2961 2965
2962 ASSEMBLER_TEST_GENERATE(Vmvnq, assembler) { 2966 ASSEMBLER_TEST_GENERATE(Vmvnq, assembler) {
2963 if (TargetCPUFeatures::neon_supported()) { 2967 if (TargetCPUFeatures::neon_supported()) {
2964 __ LoadImmediate(R1, 42); // R1 <- 42. 2968 __ LoadImmediate(R1, 42); // R1 <- 42.
2965 __ vmovsr(S2, R1); // S2 <- R1. 2969 __ vmovsr(S2, R1); // S2 <- R1.
2966 __ vmvnq(Q1, Q0); // Q1 <- ~Q0. 2970 __ vmvnq(Q1, Q0); // Q1 <- ~Q0.
2967 __ vmvnq(Q2, Q1); // Q2 <- ~Q1. 2971 __ vmvnq(Q2, Q1); // Q2 <- ~Q1.
2968 __ vmovrs(R0, S10); // Now R0 should be 42 again. 2972 __ vmovrs(R0, S10); // Now R0 should be 42 again.
2969 __ bx(LR); 2973 __ bx(LR);
2970 } else { 2974 } else {
2971 __ LoadImmediate(R0, 42); 2975 __ LoadImmediate(R0, 42);
2972 __ bx(LR); 2976 __ bx(LR);
2973 } 2977 }
2974 } 2978 }
2975 2979
2976 2980
2977 ASSEMBLER_TEST_RUN(Vmvnq, test) { 2981 ASSEMBLER_TEST_RUN(Vmvnq, test) {
2978 EXPECT(test != NULL); 2982 EXPECT(test != NULL);
2979 typedef int (*Tst)(); 2983 typedef int (*Tst)() DART_UNUSED;
2980 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 2984 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
2981 } 2985 }
2982 2986
2983 2987
2984 ASSEMBLER_TEST_GENERATE(Vdupb, assembler) { 2988 ASSEMBLER_TEST_GENERATE(Vdupb, assembler) {
2985 if (TargetCPUFeatures::neon_supported()) { 2989 if (TargetCPUFeatures::neon_supported()) {
2986 __ LoadImmediate(R0, 0x00000000); 2990 __ LoadImmediate(R0, 0x00000000);
2987 __ LoadImmediate(R1, 0x00ff0000); 2991 __ LoadImmediate(R1, 0x00ff0000);
2988 __ vmovsr(S4, R0); 2992 __ vmovsr(S4, R0);
2989 __ vmovsr(S5, R1); 2993 __ vmovsr(S5, R1);
(...skipping 12 matching lines...) Expand all
3002 __ bx(LR); 3006 __ bx(LR);
3003 } else { 3007 } else {
3004 __ LoadImmediate(R0, -4); 3008 __ LoadImmediate(R0, -4);
3005 __ bx(LR); 3009 __ bx(LR);
3006 } 3010 }
3007 } 3011 }
3008 3012
3009 3013
3010 ASSEMBLER_TEST_RUN(Vdupb, test) { 3014 ASSEMBLER_TEST_RUN(Vdupb, test) {
3011 EXPECT(test != NULL); 3015 EXPECT(test != NULL);
3012 typedef int (*Tst)(); 3016 typedef int (*Tst)() DART_UNUSED;
3013 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3017 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3014 } 3018 }
3015 3019
3016 3020
3017 ASSEMBLER_TEST_GENERATE(Vduph, assembler) { 3021 ASSEMBLER_TEST_GENERATE(Vduph, assembler) {
3018 if (TargetCPUFeatures::neon_supported()) { 3022 if (TargetCPUFeatures::neon_supported()) {
3019 __ LoadImmediate(R0, 0xffff0000); 3023 __ LoadImmediate(R0, 0xffff0000);
3020 __ LoadImmediate(R1, 0x00000000); 3024 __ LoadImmediate(R1, 0x00000000);
3021 __ vmovsr(S4, R0); 3025 __ vmovsr(S4, R0);
3022 __ vmovsr(S5, R1); 3026 __ vmovsr(S5, R1);
(...skipping 12 matching lines...) Expand all
3035 __ bx(LR); 3039 __ bx(LR);
3036 } else { 3040 } else {
3037 __ LoadImmediate(R0, -4); 3041 __ LoadImmediate(R0, -4);
3038 __ bx(LR); 3042 __ bx(LR);
3039 } 3043 }
3040 } 3044 }
3041 3045
3042 3046
3043 ASSEMBLER_TEST_RUN(Vduph, test) { 3047 ASSEMBLER_TEST_RUN(Vduph, test) {
3044 EXPECT(test != NULL); 3048 EXPECT(test != NULL);
3045 typedef int (*Tst)(); 3049 typedef int (*Tst)() DART_UNUSED;
3046 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3050 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3047 } 3051 }
3048 3052
3049 3053
3050 ASSEMBLER_TEST_GENERATE(Vdupw, assembler) { 3054 ASSEMBLER_TEST_GENERATE(Vdupw, assembler) {
3051 if (TargetCPUFeatures::neon_supported()) { 3055 if (TargetCPUFeatures::neon_supported()) {
3052 __ LoadImmediate(R0, 0x00000000); 3056 __ LoadImmediate(R0, 0x00000000);
3053 __ LoadImmediate(R1, 0xffffffff); 3057 __ LoadImmediate(R1, 0xffffffff);
3054 __ vmovsr(S4, R0); 3058 __ vmovsr(S4, R0);
3055 __ vmovsr(S5, R1); 3059 __ vmovsr(S5, R1);
(...skipping 12 matching lines...) Expand all
3068 __ bx(LR); 3072 __ bx(LR);
3069 } else { 3073 } else {
3070 __ LoadImmediate(R0, -4); 3074 __ LoadImmediate(R0, -4);
3071 __ bx(LR); 3075 __ bx(LR);
3072 } 3076 }
3073 } 3077 }
3074 3078
3075 3079
3076 ASSEMBLER_TEST_RUN(Vdupw, test) { 3080 ASSEMBLER_TEST_RUN(Vdupw, test) {
3077 EXPECT(test != NULL); 3081 EXPECT(test != NULL);
3078 typedef int (*Tst)(); 3082 typedef int (*Tst)() DART_UNUSED;
3079 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3083 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3080 } 3084 }
3081 3085
3082 3086
3083 ASSEMBLER_TEST_GENERATE(Vzipqw, assembler) { 3087 ASSEMBLER_TEST_GENERATE(Vzipqw, assembler) {
3084 if (TargetCPUFeatures::neon_supported()) { 3088 if (TargetCPUFeatures::neon_supported()) {
3085 __ LoadSImmediate(S0, 0.0); 3089 __ LoadSImmediate(S0, 0.0);
3086 __ LoadSImmediate(S1, 1.0); 3090 __ LoadSImmediate(S1, 1.0);
3087 __ LoadSImmediate(S2, 2.0); 3091 __ LoadSImmediate(S2, 2.0);
3088 __ LoadSImmediate(S3, 3.0); 3092 __ LoadSImmediate(S3, 3.0);
(...skipping 12 matching lines...) Expand all
3101 __ bx(LR); 3105 __ bx(LR);
3102 } else { 3106 } else {
3103 __ LoadSImmediate(S0, 8.0); 3107 __ LoadSImmediate(S0, 8.0);
3104 __ bx(LR); 3108 __ bx(LR);
3105 } 3109 }
3106 } 3110 }
3107 3111
3108 3112
3109 ASSEMBLER_TEST_RUN(Vzipqw, test) { 3113 ASSEMBLER_TEST_RUN(Vzipqw, test) {
3110 EXPECT(test != NULL); 3114 EXPECT(test != NULL);
3111 typedef float (*Vzipqw)(); 3115 typedef float (*Vzipqw)() DART_UNUSED;
3112 float res = EXECUTE_TEST_CODE_FLOAT(Vzipqw, test->entry()); 3116 float res = EXECUTE_TEST_CODE_FLOAT(Vzipqw, test->entry());
3113 EXPECT_FLOAT_EQ(8.0, res, 0.0001f); 3117 EXPECT_FLOAT_EQ(8.0, res, 0.0001f);
3114 } 3118 }
3115 3119
3116 3120
3117 ASSEMBLER_TEST_GENERATE(Vceqqi32, assembler) { 3121 ASSEMBLER_TEST_GENERATE(Vceqqi32, assembler) {
3118 if (TargetCPUFeatures::neon_supported()) { 3122 if (TargetCPUFeatures::neon_supported()) {
3119 __ mov(R0, Operand(1)); 3123 __ mov(R0, Operand(1));
3120 __ vmovsr(S0, R0); 3124 __ vmovsr(S0, R0);
3121 __ mov(R0, Operand(2)); 3125 __ mov(R0, Operand(2));
(...skipping 24 matching lines...) Expand all
3146 __ bx(LR); 3150 __ bx(LR);
3147 } else { 3151 } else {
3148 __ LoadImmediate(R0, -2); 3152 __ LoadImmediate(R0, -2);
3149 __ bx(LR); 3153 __ bx(LR);
3150 } 3154 }
3151 } 3155 }
3152 3156
3153 3157
3154 ASSEMBLER_TEST_RUN(Vceqqi32, test) { 3158 ASSEMBLER_TEST_RUN(Vceqqi32, test) {
3155 EXPECT(test != NULL); 3159 EXPECT(test != NULL);
3156 typedef int (*Tst)(); 3160 typedef int (*Tst)() DART_UNUSED;
3157 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3161 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3158 } 3162 }
3159 3163
3160 3164
3161 ASSEMBLER_TEST_GENERATE(Vceqqs, assembler) { 3165 ASSEMBLER_TEST_GENERATE(Vceqqs, assembler) {
3162 if (TargetCPUFeatures::neon_supported()) { 3166 if (TargetCPUFeatures::neon_supported()) {
3163 __ LoadSImmediate(S0, 1.0); 3167 __ LoadSImmediate(S0, 1.0);
3164 __ LoadSImmediate(S1, 2.0); 3168 __ LoadSImmediate(S1, 2.0);
3165 __ LoadSImmediate(S2, 3.0); 3169 __ LoadSImmediate(S2, 3.0);
3166 __ LoadSImmediate(S3, 4.0); 3170 __ LoadSImmediate(S3, 4.0);
(...skipping 15 matching lines...) Expand all
3182 __ bx(LR); 3186 __ bx(LR);
3183 } else { 3187 } else {
3184 __ LoadImmediate(R0, -2); 3188 __ LoadImmediate(R0, -2);
3185 __ bx(LR); 3189 __ bx(LR);
3186 } 3190 }
3187 } 3191 }
3188 3192
3189 3193
3190 ASSEMBLER_TEST_RUN(Vceqqs, test) { 3194 ASSEMBLER_TEST_RUN(Vceqqs, test) {
3191 EXPECT(test != NULL); 3195 EXPECT(test != NULL);
3192 typedef int (*Tst)(); 3196 typedef int (*Tst)() DART_UNUSED;
3193 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3197 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3194 } 3198 }
3195 3199
3196 3200
3197 ASSEMBLER_TEST_GENERATE(Vcgeqi32, assembler) { 3201 ASSEMBLER_TEST_GENERATE(Vcgeqi32, assembler) {
3198 if (TargetCPUFeatures::neon_supported()) { 3202 if (TargetCPUFeatures::neon_supported()) {
3199 __ mov(R0, Operand(1)); 3203 __ mov(R0, Operand(1));
3200 __ vmovsr(S0, R0); 3204 __ vmovsr(S0, R0);
3201 __ mov(R0, Operand(2)); 3205 __ mov(R0, Operand(2));
3202 __ vmovsr(S1, R0); 3206 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
3226 __ bx(LR); 3230 __ bx(LR);
3227 } else { 3231 } else {
3228 __ LoadImmediate(R0, -2); 3232 __ LoadImmediate(R0, -2);
3229 __ bx(LR); 3233 __ bx(LR);
3230 } 3234 }
3231 } 3235 }
3232 3236
3233 3237
3234 ASSEMBLER_TEST_RUN(Vcgeqi32, test) { 3238 ASSEMBLER_TEST_RUN(Vcgeqi32, test) {
3235 EXPECT(test != NULL); 3239 EXPECT(test != NULL);
3236 typedef int (*Tst)(); 3240 typedef int (*Tst)() DART_UNUSED;
3237 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3241 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3238 } 3242 }
3239 3243
3240 3244
3241 ASSEMBLER_TEST_GENERATE(Vcugeqi32, assembler) { 3245 ASSEMBLER_TEST_GENERATE(Vcugeqi32, assembler) {
3242 if (TargetCPUFeatures::neon_supported()) { 3246 if (TargetCPUFeatures::neon_supported()) {
3243 __ mov(R0, Operand(1)); 3247 __ mov(R0, Operand(1));
3244 __ vmovsr(S0, R0); 3248 __ vmovsr(S0, R0);
3245 __ mov(R0, Operand(2)); 3249 __ mov(R0, Operand(2));
3246 __ vmovsr(S1, R0); 3250 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
3270 __ bx(LR); 3274 __ bx(LR);
3271 } else { 3275 } else {
3272 __ LoadImmediate(R0, -2); 3276 __ LoadImmediate(R0, -2);
3273 __ bx(LR); 3277 __ bx(LR);
3274 } 3278 }
3275 } 3279 }
3276 3280
3277 3281
3278 ASSEMBLER_TEST_RUN(Vcugeqi32, test) { 3282 ASSEMBLER_TEST_RUN(Vcugeqi32, test) {
3279 EXPECT(test != NULL); 3283 EXPECT(test != NULL);
3280 typedef int (*Tst)(); 3284 typedef int (*Tst)() DART_UNUSED;
3281 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3285 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3282 } 3286 }
3283 3287
3284 3288
3285 ASSEMBLER_TEST_GENERATE(Vcgeqs, assembler) { 3289 ASSEMBLER_TEST_GENERATE(Vcgeqs, assembler) {
3286 if (TargetCPUFeatures::neon_supported()) { 3290 if (TargetCPUFeatures::neon_supported()) {
3287 __ LoadSImmediate(S0, 1.0); 3291 __ LoadSImmediate(S0, 1.0);
3288 __ LoadSImmediate(S1, 2.0); 3292 __ LoadSImmediate(S1, 2.0);
3289 __ LoadSImmediate(S2, 3.0); 3293 __ LoadSImmediate(S2, 3.0);
3290 __ LoadSImmediate(S3, 4.0); 3294 __ LoadSImmediate(S3, 4.0);
(...skipping 15 matching lines...) Expand all
3306 __ bx(LR); 3310 __ bx(LR);
3307 } else { 3311 } else {
3308 __ LoadImmediate(R0, -2); 3312 __ LoadImmediate(R0, -2);
3309 __ bx(LR); 3313 __ bx(LR);
3310 } 3314 }
3311 } 3315 }
3312 3316
3313 3317
3314 ASSEMBLER_TEST_RUN(Vcgeqs, test) { 3318 ASSEMBLER_TEST_RUN(Vcgeqs, test) {
3315 EXPECT(test != NULL); 3319 EXPECT(test != NULL);
3316 typedef int (*Tst)(); 3320 typedef int (*Tst)() DART_UNUSED;
3317 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3321 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3318 } 3322 }
3319 3323
3320 3324
3321 ASSEMBLER_TEST_GENERATE(Vcgtqi32, assembler) { 3325 ASSEMBLER_TEST_GENERATE(Vcgtqi32, assembler) {
3322 if (TargetCPUFeatures::neon_supported()) { 3326 if (TargetCPUFeatures::neon_supported()) {
3323 __ mov(R0, Operand(1)); 3327 __ mov(R0, Operand(1));
3324 __ vmovsr(S0, R0); 3328 __ vmovsr(S0, R0);
3325 __ mov(R0, Operand(2)); 3329 __ mov(R0, Operand(2));
3326 __ vmovsr(S1, R0); 3330 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
3350 __ bx(LR); 3354 __ bx(LR);
3351 } else { 3355 } else {
3352 __ LoadImmediate(R0, -2); 3356 __ LoadImmediate(R0, -2);
3353 __ bx(LR); 3357 __ bx(LR);
3354 } 3358 }
3355 } 3359 }
3356 3360
3357 3361
3358 ASSEMBLER_TEST_RUN(Vcgtqi32, test) { 3362 ASSEMBLER_TEST_RUN(Vcgtqi32, test) {
3359 EXPECT(test != NULL); 3363 EXPECT(test != NULL);
3360 typedef int (*Tst)(); 3364 typedef int (*Tst)() DART_UNUSED;
3361 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3365 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3362 } 3366 }
3363 3367
3364 3368
3365 ASSEMBLER_TEST_GENERATE(Vcugtqi32, assembler) { 3369 ASSEMBLER_TEST_GENERATE(Vcugtqi32, assembler) {
3366 if (TargetCPUFeatures::neon_supported()) { 3370 if (TargetCPUFeatures::neon_supported()) {
3367 __ mov(R0, Operand(1)); 3371 __ mov(R0, Operand(1));
3368 __ vmovsr(S0, R0); 3372 __ vmovsr(S0, R0);
3369 __ mov(R0, Operand(2)); 3373 __ mov(R0, Operand(2));
3370 __ vmovsr(S1, R0); 3374 __ vmovsr(S1, R0);
(...skipping 23 matching lines...) Expand all
3394 __ bx(LR); 3398 __ bx(LR);
3395 } else { 3399 } else {
3396 __ LoadImmediate(R0, -2); 3400 __ LoadImmediate(R0, -2);
3397 __ bx(LR); 3401 __ bx(LR);
3398 } 3402 }
3399 } 3403 }
3400 3404
3401 3405
3402 ASSEMBLER_TEST_RUN(Vcugtqi32, test) { 3406 ASSEMBLER_TEST_RUN(Vcugtqi32, test) {
3403 EXPECT(test != NULL); 3407 EXPECT(test != NULL);
3404 typedef int (*Tst)(); 3408 typedef int (*Tst)() DART_UNUSED;
3405 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3409 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3406 } 3410 }
3407 3411
3408 3412
3409 ASSEMBLER_TEST_GENERATE(Vcgtqs, assembler) { 3413 ASSEMBLER_TEST_GENERATE(Vcgtqs, assembler) {
3410 if (TargetCPUFeatures::neon_supported()) { 3414 if (TargetCPUFeatures::neon_supported()) {
3411 __ LoadSImmediate(S0, 1.0); 3415 __ LoadSImmediate(S0, 1.0);
3412 __ LoadSImmediate(S1, 2.0); 3416 __ LoadSImmediate(S1, 2.0);
3413 __ LoadSImmediate(S2, 3.0); 3417 __ LoadSImmediate(S2, 3.0);
3414 __ LoadSImmediate(S3, 4.0); 3418 __ LoadSImmediate(S3, 4.0);
(...skipping 15 matching lines...) Expand all
3430 __ bx(LR); 3434 __ bx(LR);
3431 } else { 3435 } else {
3432 __ LoadImmediate(R0, -2); 3436 __ LoadImmediate(R0, -2);
3433 __ bx(LR); 3437 __ bx(LR);
3434 } 3438 }
3435 } 3439 }
3436 3440
3437 3441
3438 ASSEMBLER_TEST_RUN(Vcgtqs, test) { 3442 ASSEMBLER_TEST_RUN(Vcgtqs, test) {
3439 EXPECT(test != NULL); 3443 EXPECT(test != NULL);
3440 typedef int (*Tst)(); 3444 typedef int (*Tst)() DART_UNUSED;
3441 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3445 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3442 } 3446 }
3443 3447
3444 3448
3445 ASSEMBLER_TEST_GENERATE(Vminqs, assembler) { 3449 ASSEMBLER_TEST_GENERATE(Vminqs, assembler) {
3446 if (TargetCPUFeatures::neon_supported()) { 3450 if (TargetCPUFeatures::neon_supported()) {
3447 __ LoadSImmediate(S0, 1.0); 3451 __ LoadSImmediate(S0, 1.0);
3448 __ LoadSImmediate(S1, 2.0); 3452 __ LoadSImmediate(S1, 2.0);
3449 __ LoadSImmediate(S2, 3.0); 3453 __ LoadSImmediate(S2, 3.0);
3450 __ LoadSImmediate(S3, 4.0); 3454 __ LoadSImmediate(S3, 4.0);
(...skipping 14 matching lines...) Expand all
3465 __ bx(LR); 3469 __ bx(LR);
3466 } else { 3470 } else {
3467 __ LoadImmediate(R0, 8); 3471 __ LoadImmediate(R0, 8);
3468 __ bx(LR); 3472 __ bx(LR);
3469 } 3473 }
3470 } 3474 }
3471 3475
3472 3476
3473 ASSEMBLER_TEST_RUN(Vminqs, test) { 3477 ASSEMBLER_TEST_RUN(Vminqs, test) {
3474 EXPECT(test != NULL); 3478 EXPECT(test != NULL);
3475 typedef int (*Tst)(); 3479 typedef int (*Tst)() DART_UNUSED;
3476 EXPECT_EQ(8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3480 EXPECT_EQ(8, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3477 } 3481 }
3478 3482
3479 3483
3480 ASSEMBLER_TEST_GENERATE(Vmaxqs, assembler) { 3484 ASSEMBLER_TEST_GENERATE(Vmaxqs, assembler) {
3481 if (TargetCPUFeatures::neon_supported()) { 3485 if (TargetCPUFeatures::neon_supported()) {
3482 __ LoadSImmediate(S0, 1.0); 3486 __ LoadSImmediate(S0, 1.0);
3483 __ LoadSImmediate(S1, 2.0); 3487 __ LoadSImmediate(S1, 2.0);
3484 __ LoadSImmediate(S2, 3.0); 3488 __ LoadSImmediate(S2, 3.0);
3485 __ LoadSImmediate(S3, 4.0); 3489 __ LoadSImmediate(S3, 4.0);
(...skipping 14 matching lines...) Expand all
3500 __ bx(LR); 3504 __ bx(LR);
3501 } else { 3505 } else {
3502 __ LoadImmediate(R0, 14); 3506 __ LoadImmediate(R0, 14);
3503 __ bx(LR); 3507 __ bx(LR);
3504 } 3508 }
3505 } 3509 }
3506 3510
3507 3511
3508 ASSEMBLER_TEST_RUN(Vmaxqs, test) { 3512 ASSEMBLER_TEST_RUN(Vmaxqs, test) {
3509 EXPECT(test != NULL); 3513 EXPECT(test != NULL);
3510 typedef int (*Tst)(); 3514 typedef int (*Tst)() DART_UNUSED;
3511 EXPECT_EQ(14, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 3515 EXPECT_EQ(14, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
3512 } 3516 }
3513 3517
3514 3518
3515 // This is the same function as in the Simulator. 3519 // This is the same function as in the Simulator.
3516 static float arm_recip_estimate(float a) { 3520 static float arm_recip_estimate(float a) {
3517 // From the ARM Architecture Reference Manual A2-85. 3521 // From the ARM Architecture Reference Manual A2-85.
3518 if (isinf(a) || (fabs(a) >= exp2f(126))) return 0.0; 3522 if (isinf(a) || (fabs(a) >= exp2f(126))) return 0.0;
3519 else if (a == 0.0) return INFINITY; 3523 else if (a == 0.0) return INFINITY;
3520 else if (isnan(a)) return a; 3524 else if (isnan(a)) return a;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3559 __ bx(LR); 3563 __ bx(LR);
3560 } else { 3564 } else {
3561 __ LoadSImmediate(S0, arm_recip_estimate(147.0)); 3565 __ LoadSImmediate(S0, arm_recip_estimate(147.0));
3562 __ bx(LR); 3566 __ bx(LR);
3563 } 3567 }
3564 } 3568 }
3565 3569
3566 3570
3567 ASSEMBLER_TEST_RUN(Vrecpeqs, test) { 3571 ASSEMBLER_TEST_RUN(Vrecpeqs, test) {
3568 EXPECT(test != NULL); 3572 EXPECT(test != NULL);
3569 typedef float (*Vrecpeqs)(); 3573 typedef float (*Vrecpeqs)() DART_UNUSED;
3570 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpeqs, test->entry()); 3574 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpeqs, test->entry());
3571 EXPECT_FLOAT_EQ(arm_recip_estimate(147.0), res, 0.0001f); 3575 EXPECT_FLOAT_EQ(arm_recip_estimate(147.0), res, 0.0001f);
3572 } 3576 }
3573 3577
3574 3578
3575 ASSEMBLER_TEST_GENERATE(Vrecpsqs, assembler) { 3579 ASSEMBLER_TEST_GENERATE(Vrecpsqs, assembler) {
3576 if (TargetCPUFeatures::neon_supported()) { 3580 if (TargetCPUFeatures::neon_supported()) {
3577 __ LoadSImmediate(S4, 5.0); 3581 __ LoadSImmediate(S4, 5.0);
3578 __ LoadSImmediate(S5, 2.0); 3582 __ LoadSImmediate(S5, 2.0);
3579 __ LoadSImmediate(S6, 3.0); 3583 __ LoadSImmediate(S6, 3.0);
3580 __ LoadSImmediate(S7, 4.0); 3584 __ LoadSImmediate(S7, 4.0);
3581 3585
3582 __ LoadSImmediate(S8, 10.0); 3586 __ LoadSImmediate(S8, 10.0);
3583 __ LoadSImmediate(S9, 1.0); 3587 __ LoadSImmediate(S9, 1.0);
3584 __ LoadSImmediate(S10, 6.0); 3588 __ LoadSImmediate(S10, 6.0);
3585 __ LoadSImmediate(S11, 3.0); 3589 __ LoadSImmediate(S11, 3.0);
3586 3590
3587 __ vrecpsqs(Q0, Q1, Q2); 3591 __ vrecpsqs(Q0, Q1, Q2);
3588 3592
3589 __ bx(LR); 3593 __ bx(LR);
3590 } else { 3594 } else {
3591 __ LoadSImmediate(S0, 2.0 - 10.0 * 5.0); 3595 __ LoadSImmediate(S0, 2.0 - 10.0 * 5.0);
3592 __ bx(LR); 3596 __ bx(LR);
3593 } 3597 }
3594 } 3598 }
3595 3599
3596 3600
3597 ASSEMBLER_TEST_RUN(Vrecpsqs, test) { 3601 ASSEMBLER_TEST_RUN(Vrecpsqs, test) {
3598 EXPECT(test != NULL); 3602 EXPECT(test != NULL);
3599 typedef float (*Vrecpsqs)(); 3603 typedef float (*Vrecpsqs)() DART_UNUSED;
3600 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpsqs, test->entry()); 3604 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpsqs, test->entry());
3601 EXPECT_FLOAT_EQ(2.0 - 10.0 * 5.0, res, 0.0001f); 3605 EXPECT_FLOAT_EQ(2.0 - 10.0 * 5.0, res, 0.0001f);
3602 } 3606 }
3603 3607
3604 3608
3605 ASSEMBLER_TEST_GENERATE(Reciprocal, assembler) { 3609 ASSEMBLER_TEST_GENERATE(Reciprocal, assembler) {
3606 if (TargetCPUFeatures::neon_supported()) { 3610 if (TargetCPUFeatures::neon_supported()) {
3607 __ LoadSImmediate(S4, 147000.0); 3611 __ LoadSImmediate(S4, 147000.0);
3608 __ vmovs(S5, S4); 3612 __ vmovs(S5, S4);
3609 __ vmovs(S6, S4); 3613 __ vmovs(S6, S4);
(...skipping 10 matching lines...) Expand all
3620 __ bx(LR); 3624 __ bx(LR);
3621 } else { 3625 } else {
3622 __ LoadSImmediate(S0, 1.0/147000.0); 3626 __ LoadSImmediate(S0, 1.0/147000.0);
3623 __ bx(LR); 3627 __ bx(LR);
3624 } 3628 }
3625 } 3629 }
3626 3630
3627 3631
3628 ASSEMBLER_TEST_RUN(Reciprocal, test) { 3632 ASSEMBLER_TEST_RUN(Reciprocal, test) {
3629 EXPECT(test != NULL); 3633 EXPECT(test != NULL);
3630 typedef float (*Reciprocal)(); 3634 typedef float (*Reciprocal)() DART_UNUSED;
3631 float res = EXECUTE_TEST_CODE_FLOAT(Reciprocal, test->entry()); 3635 float res = EXECUTE_TEST_CODE_FLOAT(Reciprocal, test->entry());
3632 EXPECT_FLOAT_EQ(1.0/147000.0, res, 0.0001f); 3636 EXPECT_FLOAT_EQ(1.0/147000.0, res, 0.0001f);
3633 } 3637 }
3634 3638
3635 3639
3636 static float arm_reciprocal_sqrt_estimate(float a) { 3640 static float arm_reciprocal_sqrt_estimate(float a) {
3637 // From the ARM Architecture Reference Manual A2-87. 3641 // From the ARM Architecture Reference Manual A2-87.
3638 if (isinf(a) || (fabs(a) >= exp2f(126))) return 0.0; 3642 if (isinf(a) || (fabs(a) >= exp2f(126))) return 0.0;
3639 else if (a == 0.0) return INFINITY; 3643 else if (a == 0.0) return INFINITY;
3640 else if (isnan(a)) return a; 3644 else if (isnan(a)) return a;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3696 __ bx(LR); 3700 __ bx(LR);
3697 } else { 3701 } else {
3698 __ LoadSImmediate(S0, arm_reciprocal_sqrt_estimate(147.0)); 3702 __ LoadSImmediate(S0, arm_reciprocal_sqrt_estimate(147.0));
3699 __ bx(LR); 3703 __ bx(LR);
3700 } 3704 }
3701 } 3705 }
3702 3706
3703 3707
3704 ASSEMBLER_TEST_RUN(Vrsqrteqs, test) { 3708 ASSEMBLER_TEST_RUN(Vrsqrteqs, test) {
3705 EXPECT(test != NULL); 3709 EXPECT(test != NULL);
3706 typedef float (*Vrsqrteqs)(); 3710 typedef float (*Vrsqrteqs)() DART_UNUSED;
3707 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrteqs, test->entry()); 3711 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrteqs, test->entry());
3708 EXPECT_FLOAT_EQ(arm_reciprocal_sqrt_estimate(147.0), res, 0.0001f); 3712 EXPECT_FLOAT_EQ(arm_reciprocal_sqrt_estimate(147.0), res, 0.0001f);
3709 } 3713 }
3710 3714
3711 3715
3712 ASSEMBLER_TEST_GENERATE(Vrsqrtsqs, assembler) { 3716 ASSEMBLER_TEST_GENERATE(Vrsqrtsqs, assembler) {
3713 if (TargetCPUFeatures::neon_supported()) { 3717 if (TargetCPUFeatures::neon_supported()) {
3714 __ LoadSImmediate(S4, 5.0); 3718 __ LoadSImmediate(S4, 5.0);
3715 __ LoadSImmediate(S5, 2.0); 3719 __ LoadSImmediate(S5, 2.0);
3716 __ LoadSImmediate(S6, 3.0); 3720 __ LoadSImmediate(S6, 3.0);
3717 __ LoadSImmediate(S7, 4.0); 3721 __ LoadSImmediate(S7, 4.0);
3718 3722
3719 __ LoadSImmediate(S8, 10.0); 3723 __ LoadSImmediate(S8, 10.0);
3720 __ LoadSImmediate(S9, 1.0); 3724 __ LoadSImmediate(S9, 1.0);
3721 __ LoadSImmediate(S10, 6.0); 3725 __ LoadSImmediate(S10, 6.0);
3722 __ LoadSImmediate(S11, 3.0); 3726 __ LoadSImmediate(S11, 3.0);
3723 3727
3724 __ vrsqrtsqs(Q0, Q1, Q2); 3728 __ vrsqrtsqs(Q0, Q1, Q2);
3725 3729
3726 __ bx(LR); 3730 __ bx(LR);
3727 } else { 3731 } else {
3728 __ LoadSImmediate(S0, (3.0 - 10.0 * 5.0) / 2.0); 3732 __ LoadSImmediate(S0, (3.0 - 10.0 * 5.0) / 2.0);
3729 __ bx(LR); 3733 __ bx(LR);
3730 } 3734 }
3731 } 3735 }
3732 3736
3733 3737
3734 ASSEMBLER_TEST_RUN(Vrsqrtsqs, test) { 3738 ASSEMBLER_TEST_RUN(Vrsqrtsqs, test) {
3735 EXPECT(test != NULL); 3739 EXPECT(test != NULL);
3736 typedef float (*Vrsqrtsqs)(); 3740 typedef float (*Vrsqrtsqs)() DART_UNUSED;
3737 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrtsqs, test->entry()); 3741 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrtsqs, test->entry());
3738 EXPECT_FLOAT_EQ((3.0 - 10.0 * 5.0)/2.0, res, 0.0001f); 3742 EXPECT_FLOAT_EQ((3.0 - 10.0 * 5.0)/2.0, res, 0.0001f);
3739 } 3743 }
3740 3744
3741 3745
3742 ASSEMBLER_TEST_GENERATE(ReciprocalSqrt, assembler) { 3746 ASSEMBLER_TEST_GENERATE(ReciprocalSqrt, assembler) {
3743 if (TargetCPUFeatures::neon_supported()) { 3747 if (TargetCPUFeatures::neon_supported()) {
3744 __ LoadSImmediate(S4, 147000.0); 3748 __ LoadSImmediate(S4, 147000.0);
3745 __ vmovs(S5, S4); 3749 __ vmovs(S5, S4);
3746 __ vmovs(S6, S4); 3750 __ vmovs(S6, S4);
(...skipping 14 matching lines...) Expand all
3761 __ bx(LR); 3765 __ bx(LR);
3762 } else { 3766 } else {
3763 __ LoadSImmediate(S0, 1.0/sqrt(147000.0)); 3767 __ LoadSImmediate(S0, 1.0/sqrt(147000.0));
3764 __ bx(LR); 3768 __ bx(LR);
3765 } 3769 }
3766 } 3770 }
3767 3771
3768 3772
3769 ASSEMBLER_TEST_RUN(ReciprocalSqrt, test) { 3773 ASSEMBLER_TEST_RUN(ReciprocalSqrt, test) {
3770 EXPECT(test != NULL); 3774 EXPECT(test != NULL);
3771 typedef float (*ReciprocalSqrt)(); 3775 typedef float (*ReciprocalSqrt)() DART_UNUSED;
3772 float res = EXECUTE_TEST_CODE_FLOAT(ReciprocalSqrt, test->entry()); 3776 float res = EXECUTE_TEST_CODE_FLOAT(ReciprocalSqrt, test->entry());
3773 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001f); 3777 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001f);
3774 } 3778 }
3775 3779
3776 3780
3777 ASSEMBLER_TEST_GENERATE(SIMDSqrt, assembler) { 3781 ASSEMBLER_TEST_GENERATE(SIMDSqrt, assembler) {
3778 if (TargetCPUFeatures::neon_supported()) { 3782 if (TargetCPUFeatures::neon_supported()) {
3779 __ LoadSImmediate(S4, 147000.0); 3783 __ LoadSImmediate(S4, 147000.0);
3780 __ vmovs(S5, S4); 3784 __ vmovs(S5, S4);
3781 __ vmovs(S6, S4); 3785 __ vmovs(S6, S4);
(...skipping 24 matching lines...) Expand all
3806 __ bx(LR); 3810 __ bx(LR);
3807 } else { 3811 } else {
3808 __ LoadSImmediate(S0, sqrt(147000.0)); 3812 __ LoadSImmediate(S0, sqrt(147000.0));
3809 __ bx(LR); 3813 __ bx(LR);
3810 } 3814 }
3811 } 3815 }
3812 3816
3813 3817
3814 ASSEMBLER_TEST_RUN(SIMDSqrt, test) { 3818 ASSEMBLER_TEST_RUN(SIMDSqrt, test) {
3815 EXPECT(test != NULL); 3819 EXPECT(test != NULL);
3816 typedef float (*SIMDSqrt)(); 3820 typedef float (*SIMDSqrt)() DART_UNUSED;
3817 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt, test->entry()); 3821 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt, test->entry());
3818 EXPECT_FLOAT_EQ(sqrt(147000.0), res, 0.0001f); 3822 EXPECT_FLOAT_EQ(sqrt(147000.0), res, 0.0001f);
3819 } 3823 }
3820 3824
3821 3825
3822 ASSEMBLER_TEST_GENERATE(SIMDSqrt2, assembler) { 3826 ASSEMBLER_TEST_GENERATE(SIMDSqrt2, assembler) {
3823 if (TargetCPUFeatures::neon_supported()) { 3827 if (TargetCPUFeatures::neon_supported()) {
3824 __ LoadSImmediate(S4, 1.0); 3828 __ LoadSImmediate(S4, 1.0);
3825 __ LoadSImmediate(S5, 4.0); 3829 __ LoadSImmediate(S5, 4.0);
3826 __ LoadSImmediate(S6, 9.0); 3830 __ LoadSImmediate(S6, 9.0);
(...skipping 28 matching lines...) Expand all
3855 __ bx(LR); 3859 __ bx(LR);
3856 } else { 3860 } else {
3857 __ LoadSImmediate(S0, 10.0); 3861 __ LoadSImmediate(S0, 10.0);
3858 __ bx(LR); 3862 __ bx(LR);
3859 } 3863 }
3860 } 3864 }
3861 3865
3862 3866
3863 ASSEMBLER_TEST_RUN(SIMDSqrt2, test) { 3867 ASSEMBLER_TEST_RUN(SIMDSqrt2, test) {
3864 EXPECT(test != NULL); 3868 EXPECT(test != NULL);
3865 typedef float (*SIMDSqrt2)(); 3869 typedef float (*SIMDSqrt2)() DART_UNUSED;
3866 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt2, test->entry()); 3870 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt2, test->entry());
3867 EXPECT_FLOAT_EQ(10.0, res, 0.0001f); 3871 EXPECT_FLOAT_EQ(10.0, res, 0.0001f);
3868 } 3872 }
3869 3873
3870 3874
3871 ASSEMBLER_TEST_GENERATE(SIMDDiv, assembler) { 3875 ASSEMBLER_TEST_GENERATE(SIMDDiv, assembler) {
3872 if (TargetCPUFeatures::neon_supported()) { 3876 if (TargetCPUFeatures::neon_supported()) {
3873 __ LoadSImmediate(S4, 1.0); 3877 __ LoadSImmediate(S4, 1.0);
3874 __ LoadSImmediate(S5, 4.0); 3878 __ LoadSImmediate(S5, 4.0);
3875 __ LoadSImmediate(S6, 9.0); 3879 __ LoadSImmediate(S6, 9.0);
(...skipping 20 matching lines...) Expand all
3896 __ bx(LR); 3900 __ bx(LR);
3897 } else { 3901 } else {
3898 __ LoadSImmediate(S0, 16.0); 3902 __ LoadSImmediate(S0, 16.0);
3899 __ bx(LR); 3903 __ bx(LR);
3900 } 3904 }
3901 } 3905 }
3902 3906
3903 3907
3904 ASSEMBLER_TEST_RUN(SIMDDiv, test) { 3908 ASSEMBLER_TEST_RUN(SIMDDiv, test) {
3905 EXPECT(test != NULL); 3909 EXPECT(test != NULL);
3906 typedef float (*SIMDDiv)(); 3910 typedef float (*SIMDDiv)() DART_UNUSED;
3907 float res = EXECUTE_TEST_CODE_FLOAT(SIMDDiv, test->entry()); 3911 float res = EXECUTE_TEST_CODE_FLOAT(SIMDDiv, test->entry());
3908 EXPECT_FLOAT_EQ(16.0, res, 0.0001f); 3912 EXPECT_FLOAT_EQ(16.0, res, 0.0001f);
3909 } 3913 }
3910 3914
3911 3915
3912 ASSEMBLER_TEST_GENERATE(Vabsqs, assembler) { 3916 ASSEMBLER_TEST_GENERATE(Vabsqs, assembler) {
3913 if (TargetCPUFeatures::neon_supported()) { 3917 if (TargetCPUFeatures::neon_supported()) {
3914 __ LoadSImmediate(S4, 1.0); 3918 __ LoadSImmediate(S4, 1.0);
3915 __ LoadSImmediate(S5, -1.0); 3919 __ LoadSImmediate(S5, -1.0);
3916 __ LoadSImmediate(S6, 1.0); 3920 __ LoadSImmediate(S6, 1.0);
3917 __ LoadSImmediate(S7, -1.0); 3921 __ LoadSImmediate(S7, -1.0);
3918 3922
3919 __ vabsqs(Q0, Q1); 3923 __ vabsqs(Q0, Q1);
3920 3924
3921 __ vadds(S0, S0, S1); 3925 __ vadds(S0, S0, S1);
3922 __ vadds(S0, S0, S2); 3926 __ vadds(S0, S0, S2);
3923 __ vadds(S0, S0, S3); 3927 __ vadds(S0, S0, S3);
3924 3928
3925 __ bx(LR); 3929 __ bx(LR);
3926 } else { 3930 } else {
3927 __ LoadSImmediate(S0, 4.0); 3931 __ LoadSImmediate(S0, 4.0);
3928 __ bx(LR); 3932 __ bx(LR);
3929 } 3933 }
3930 } 3934 }
3931 3935
3932 3936
3933 ASSEMBLER_TEST_RUN(Vabsqs, test) { 3937 ASSEMBLER_TEST_RUN(Vabsqs, test) {
3934 EXPECT(test != NULL); 3938 EXPECT(test != NULL);
3935 typedef float (*Vabsqs)(); 3939 typedef float (*Vabsqs)() DART_UNUSED;
3936 float res = EXECUTE_TEST_CODE_FLOAT(Vabsqs, test->entry()); 3940 float res = EXECUTE_TEST_CODE_FLOAT(Vabsqs, test->entry());
3937 EXPECT_FLOAT_EQ(4.0, res, 0.0001f); 3941 EXPECT_FLOAT_EQ(4.0, res, 0.0001f);
3938 } 3942 }
3939 3943
3940 3944
3941 ASSEMBLER_TEST_GENERATE(Vnegqs, assembler) { 3945 ASSEMBLER_TEST_GENERATE(Vnegqs, assembler) {
3942 if (TargetCPUFeatures::neon_supported()) { 3946 if (TargetCPUFeatures::neon_supported()) {
3943 __ LoadSImmediate(S4, 1.0); 3947 __ LoadSImmediate(S4, 1.0);
3944 __ LoadSImmediate(S5, -2.0); 3948 __ LoadSImmediate(S5, -2.0);
3945 __ LoadSImmediate(S6, 1.0); 3949 __ LoadSImmediate(S6, 1.0);
3946 __ LoadSImmediate(S7, -2.0); 3950 __ LoadSImmediate(S7, -2.0);
3947 3951
3948 __ vnegqs(Q0, Q1); 3952 __ vnegqs(Q0, Q1);
3949 3953
3950 __ vadds(S0, S0, S1); 3954 __ vadds(S0, S0, S1);
3951 __ vadds(S0, S0, S2); 3955 __ vadds(S0, S0, S2);
3952 __ vadds(S0, S0, S3); 3956 __ vadds(S0, S0, S3);
3953 3957
3954 __ bx(LR); 3958 __ bx(LR);
3955 } else { 3959 } else {
3956 __ LoadSImmediate(S0, 2.0); 3960 __ LoadSImmediate(S0, 2.0);
3957 __ bx(LR); 3961 __ bx(LR);
3958 } 3962 }
3959 } 3963 }
3960 3964
3961 3965
3962 ASSEMBLER_TEST_RUN(Vnegqs, test) { 3966 ASSEMBLER_TEST_RUN(Vnegqs, test) {
3963 EXPECT(test != NULL); 3967 EXPECT(test != NULL);
3964 typedef float (*Vnegqs)(); 3968 typedef float (*Vnegqs)() DART_UNUSED;
3965 float res = EXECUTE_TEST_CODE_FLOAT(Vnegqs, test->entry()); 3969 float res = EXECUTE_TEST_CODE_FLOAT(Vnegqs, test->entry());
3966 EXPECT_FLOAT_EQ(2.0, res, 0.0001f); 3970 EXPECT_FLOAT_EQ(2.0, res, 0.0001f);
3967 } 3971 }
3968 3972
3969 3973
3970 ASSEMBLER_TEST_GENERATE(MultCheckOverflow, assembler) { 3974 ASSEMBLER_TEST_GENERATE(MultCheckOverflow, assembler) {
3971 // Both positive, no overflow 3975 // Both positive, no overflow
3972 Label overflow1, test1; 3976 Label overflow1, test1;
3973 __ LoadImmediate(R0, 42); 3977 __ LoadImmediate(R0, 42);
3974 __ LoadImmediate(R1, 0xff); 3978 __ LoadImmediate(R1, 0xff);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
4049 __ LoadImmediate(R0, 8); 4053 __ LoadImmediate(R0, 8);
4050 __ Ret(); 4054 __ Ret();
4051 4055
4052 __ Bind(&test8); 4056 __ Bind(&test8);
4053 __ Ret(); 4057 __ Ret();
4054 } 4058 }
4055 4059
4056 4060
4057 ASSEMBLER_TEST_RUN(MultCheckOverflow, test) { 4061 ASSEMBLER_TEST_RUN(MultCheckOverflow, test) {
4058 EXPECT(test != NULL); 4062 EXPECT(test != NULL);
4059 typedef int (*Tst)(); 4063 typedef int (*Tst)() DART_UNUSED;
4060 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); 4064 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry()));
4061 } 4065 }
4062 4066
4063 4067
4064 // Called from assembler_test.cc. 4068 // Called from assembler_test.cc.
4065 // LR: return address. 4069 // LR: return address.
4066 // R0: context. 4070 // R0: context.
4067 // R1: value. 4071 // R1: value.
4068 // R2: growable array. 4072 // R2: growable array.
4069 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) { 4073 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) {
4070 __ PushList((1 << CTX) | (1 << LR)); 4074 __ PushList((1 << CTX) | (1 << LR));
4071 __ mov(CTX, Operand(R0)); 4075 __ mov(CTX, Operand(R0));
4072 __ StoreIntoObject(R2, 4076 __ StoreIntoObject(R2,
4073 FieldAddress(R2, GrowableObjectArray::data_offset()), 4077 FieldAddress(R2, GrowableObjectArray::data_offset()),
4074 R1); 4078 R1);
4075 __ PopList((1 << CTX) | (1 << LR)); 4079 __ PopList((1 << CTX) | (1 << LR));
4076 __ Ret(); 4080 __ Ret();
4077 } 4081 }
4078 4082
4079 } // namespace dart 4083 } // namespace dart
4080 4084
4081 #endif // defined TARGET_ARCH_ARM 4085 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64_test.cc ('k') | runtime/vm/assembler_mips_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698