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

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

Issue 317443004: Uses assembler macro for dart SP setup on arm64. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 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.h ('k') | runtime/vm/stub_code_arm64.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_ARM64) 6 #if defined(TARGET_ARCH_ARM64)
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 static const intptr_t kTestStackSpace = 512 * kWordSize;
17
16 #define __ assembler-> 18 #define __ assembler->
17 19
18 ASSEMBLER_TEST_GENERATE(Simple, assembler) { 20 ASSEMBLER_TEST_GENERATE(Simple, assembler) {
19 __ add(R0, ZR, Operand(ZR)); 21 __ add(R0, ZR, Operand(ZR));
20 __ add(R0, R0, Operand(42)); 22 __ add(R0, R0, Operand(42));
21 __ ret(); 23 __ ret();
22 } 24 }
23 25
24 26
25 ASSEMBLER_TEST_RUN(Simple, test) { 27 ASSEMBLER_TEST_RUN(Simple, test) {
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 281
280 282
281 ASSEMBLER_TEST_RUN(AddExtReg, test) { 283 ASSEMBLER_TEST_RUN(AddExtReg, test) {
282 typedef int64_t (*Int64Return)(); 284 typedef int64_t (*Int64Return)();
283 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 285 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
284 } 286 }
285 287
286 288
287 // Loads and Stores. 289 // Loads and Stores.
288 ASSEMBLER_TEST_GENERATE(SimpleLoadStore, assembler) { 290 ASSEMBLER_TEST_GENERATE(SimpleLoadStore, assembler) {
289 __ mov(SP, CSP); 291 __ SetupDartSP(kTestStackSpace);
290 __ movz(R0, 43, 0); 292 __ movz(R0, 43, 0);
291 __ movz(R1, 42, 0); 293 __ movz(R1, 42, 0);
292 __ str(R1, Address(SP, -1*kWordSize, Address::PreIndex)); 294 __ str(R1, Address(SP, -1*kWordSize, Address::PreIndex));
293 __ ldr(R0, Address(SP, 1*kWordSize, Address::PostIndex)); 295 __ ldr(R0, Address(SP, 1*kWordSize, Address::PostIndex));
294 __ ret(); 296 __ ret();
regis 2014/06/03 20:50:54 You need to copy SP to CSP before returning, no?
zra 2014/06/03 21:25:51 In general yes. I think it didn't matter here beca
295 } 297 }
296 298
297 299
298 ASSEMBLER_TEST_RUN(SimpleLoadStore, test) { 300 ASSEMBLER_TEST_RUN(SimpleLoadStore, test) {
299 typedef int64_t (*Int64Return)(); 301 typedef int64_t (*Int64Return)();
300 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 302 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
301 } 303 }
302 304
303 305
304 ASSEMBLER_TEST_GENERATE(SimpleLoadStoreHeapTag, assembler) { 306 ASSEMBLER_TEST_GENERATE(SimpleLoadStoreHeapTag, assembler) {
305 __ mov(SP, CSP); 307 __ SetupDartSP(kTestStackSpace);
306 __ movz(R0, 43, 0); 308 __ movz(R0, 43, 0);
307 __ movz(R1, 42, 0); 309 __ movz(R1, 42, 0);
308 __ add(R2, SP, Operand(1)); 310 __ add(R2, SP, Operand(1));
309 __ str(R1, Address(R2, -1)); 311 __ str(R1, Address(R2, -1));
310 __ ldr(R0, Address(R2, -1)); 312 __ ldr(R0, Address(R2, -1));
311 __ ret(); 313 __ ret();
312 } 314 }
313 315
314 316
315 ASSEMBLER_TEST_RUN(SimpleLoadStoreHeapTag, test) { 317 ASSEMBLER_TEST_RUN(SimpleLoadStoreHeapTag, test) {
316 typedef int64_t (*Int64Return)(); 318 typedef int64_t (*Int64Return)();
317 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 319 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
318 } 320 }
319 321
320 322
321 ASSEMBLER_TEST_GENERATE(LoadStoreLargeIndex, assembler) { 323 ASSEMBLER_TEST_GENERATE(LoadStoreLargeIndex, assembler) {
322 __ mov(SP, CSP); 324 __ SetupDartSP(kTestStackSpace);
323 __ movz(R0, 43, 0); 325 __ movz(R0, 43, 0);
324 __ movz(R1, 42, 0); 326 __ movz(R1, 42, 0);
325 // Largest negative offset that can fit in the signed 9-bit immediate field. 327 // Largest negative offset that can fit in the signed 9-bit immediate field.
326 __ str(R1, Address(SP, -32*kWordSize, Address::PreIndex)); 328 __ str(R1, Address(SP, -32*kWordSize, Address::PreIndex));
327 // Largest positive kWordSize aligned offset that we can fit. 329 // Largest positive kWordSize aligned offset that we can fit.
328 __ ldr(R0, Address(SP, 31*kWordSize, Address::PostIndex)); 330 __ ldr(R0, Address(SP, 31*kWordSize, Address::PostIndex));
329 // Correction. 331 // Correction.
330 __ add(SP, SP, Operand(kWordSize)); // Restore SP. 332 __ add(SP, SP, Operand(kWordSize)); // Restore SP.
331 __ ret(); 333 __ ret();
332 } 334 }
333 335
334 336
335 ASSEMBLER_TEST_RUN(LoadStoreLargeIndex, test) { 337 ASSEMBLER_TEST_RUN(LoadStoreLargeIndex, test) {
336 typedef int64_t (*Int64Return)(); 338 typedef int64_t (*Int64Return)();
337 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 339 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
338 } 340 }
339 341
340 342
341 ASSEMBLER_TEST_GENERATE(LoadStoreLargeOffset, assembler) { 343 ASSEMBLER_TEST_GENERATE(LoadStoreLargeOffset, assembler) {
342 __ mov(SP, CSP); 344 __ SetupDartSP(kTestStackSpace);
343 __ movz(R0, 43, 0); 345 __ movz(R0, 43, 0);
344 __ movz(R1, 42, 0); 346 __ movz(R1, 42, 0);
345 __ sub(SP, SP, Operand(512*kWordSize)); 347 __ sub(SP, SP, Operand(512*kWordSize));
346 __ str(R1, Address(SP, 512*kWordSize, Address::Offset)); 348 __ str(R1, Address(SP, 512*kWordSize, Address::Offset));
347 __ add(SP, SP, Operand(512*kWordSize)); 349 __ add(SP, SP, Operand(512*kWordSize));
348 __ ldr(R0, Address(SP)); 350 __ ldr(R0, Address(SP));
349 __ ret(); 351 __ ret();
350 } 352 }
351 353
352 354
353 ASSEMBLER_TEST_RUN(LoadStoreLargeOffset, test) { 355 ASSEMBLER_TEST_RUN(LoadStoreLargeOffset, test) {
354 typedef int64_t (*Int64Return)(); 356 typedef int64_t (*Int64Return)();
355 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 357 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
356 } 358 }
357 359
358 360
359 ASSEMBLER_TEST_GENERATE(LoadStoreExtReg, assembler) { 361 ASSEMBLER_TEST_GENERATE(LoadStoreExtReg, assembler) {
360 __ mov(SP, CSP); 362 __ SetupDartSP(kTestStackSpace);
361 __ movz(R0, 43, 0); 363 __ movz(R0, 43, 0);
362 __ movz(R1, 42, 0); 364 __ movz(R1, 42, 0);
363 __ movz(R2, 0xfff8, 0); 365 __ movz(R2, 0xfff8, 0);
364 __ movk(R2, 0xffff, 1); // R2 <- -8 (int32_t). 366 __ movk(R2, 0xffff, 1); // R2 <- -8 (int32_t).
365 // This should sign extend R2, and add to SP to get address, 367 // This should sign extend R2, and add to SP to get address,
366 // i.e. SP - kWordSize. 368 // i.e. SP - kWordSize.
367 __ str(R1, Address(SP, R2, SXTW)); 369 __ str(R1, Address(SP, R2, SXTW));
368 __ sub(SP, SP, Operand(kWordSize)); 370 __ sub(SP, SP, Operand(kWordSize));
369 __ ldr(R0, Address(SP)); 371 __ ldr(R0, Address(SP));
370 __ add(SP, SP, Operand(kWordSize)); 372 __ add(SP, SP, Operand(kWordSize));
371 __ ret(); 373 __ ret();
372 } 374 }
373 375
374 376
375 ASSEMBLER_TEST_RUN(LoadStoreExtReg, test) { 377 ASSEMBLER_TEST_RUN(LoadStoreExtReg, test) {
376 typedef int64_t (*Int64Return)(); 378 typedef int64_t (*Int64Return)();
377 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 379 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
378 } 380 }
379 381
380 382
381 ASSEMBLER_TEST_GENERATE(LoadStoreScaledReg, assembler) { 383 ASSEMBLER_TEST_GENERATE(LoadStoreScaledReg, assembler) {
382 __ mov(SP, CSP); 384 __ SetupDartSP(kTestStackSpace);
383 __ movz(R0, 43, 0); 385 __ movz(R0, 43, 0);
384 __ movz(R1, 42, 0); 386 __ movz(R1, 42, 0);
385 __ movz(R2, 10, 0); 387 __ movz(R2, 10, 0);
386 __ sub(SP, SP, Operand(10*kWordSize)); 388 __ sub(SP, SP, Operand(10*kWordSize));
387 // Store R1 into SP + R2 * kWordSize. 389 // Store R1 into SP + R2 * kWordSize.
388 __ str(R1, Address(SP, R2, UXTX, Address::Scaled)); 390 __ str(R1, Address(SP, R2, UXTX, Address::Scaled));
389 __ ldr(R0, Address(SP, R2, UXTX, Address::Scaled)); 391 __ ldr(R0, Address(SP, R2, UXTX, Address::Scaled));
390 __ add(SP, SP, Operand(10*kWordSize)); 392 __ add(SP, SP, Operand(10*kWordSize));
391 __ ret(); 393 __ ret();
392 } 394 }
393 395
394 396
395 ASSEMBLER_TEST_RUN(LoadStoreScaledReg, test) { 397 ASSEMBLER_TEST_RUN(LoadStoreScaledReg, test) {
396 typedef int64_t (*Int64Return)(); 398 typedef int64_t (*Int64Return)();
397 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 399 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
398 } 400 }
399 401
400 402
401 ASSEMBLER_TEST_GENERATE(LoadSigned32Bit, assembler) { 403 ASSEMBLER_TEST_GENERATE(LoadSigned32Bit, assembler) {
402 __ mov(SP, CSP); 404 __ SetupDartSP(kTestStackSpace);
403 __ LoadImmediate(R1, 0xffffffff, kNoPP); 405 __ LoadImmediate(R1, 0xffffffff, kNoPP);
404 __ str(R1, Address(SP, -4, Address::PreIndex, kWord), kWord); 406 __ str(R1, Address(SP, -4, Address::PreIndex, kWord), kWord);
405 __ ldr(R0, Address(SP), kWord); 407 __ ldr(R0, Address(SP), kWord);
406 __ ldr(R1, Address(SP, 4, Address::PostIndex, kWord), kWord); 408 __ ldr(R1, Address(SP, 4, Address::PostIndex, kWord), kWord);
407 __ ret(); 409 __ ret();
408 } 410 }
409 411
410 412
411 ASSEMBLER_TEST_RUN(LoadSigned32Bit, test) { 413 ASSEMBLER_TEST_RUN(LoadSigned32Bit, test) {
412 typedef int64_t (*Int64Return)(); 414 typedef int64_t (*Int64Return)();
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 1330
1329 1331
1330 ASSEMBLER_TEST_RUN(LoadImmediateMedNeg4, test) { 1332 ASSEMBLER_TEST_RUN(LoadImmediateMedNeg4, test) {
1331 typedef int64_t (*Int64Return)(); 1333 typedef int64_t (*Int64Return)();
1332 EXPECT_EQ(-0x12341234, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1334 EXPECT_EQ(-0x12341234, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1333 } 1335 }
1334 1336
1335 1337
1336 // Loading immediate values with the object pool. 1338 // Loading immediate values with the object pool.
1337 ASSEMBLER_TEST_GENERATE(LoadImmediatePPSmall, assembler) { 1339 ASSEMBLER_TEST_GENERATE(LoadImmediatePPSmall, assembler) {
1338 __ mov(SP, CSP); 1340 __ SetupDartSP(kTestStackSpace);
1339 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1341 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1340 __ LoadPoolPointer(PP); 1342 __ LoadPoolPointer(PP);
1341 __ LoadImmediate(R0, 42, PP); 1343 __ LoadImmediate(R0, 42, PP);
1342 __ PopAndUntagPP(); 1344 __ PopAndUntagPP();
1343 __ ret(); 1345 __ ret();
1344 } 1346 }
1345 1347
1346 1348
1347 ASSEMBLER_TEST_RUN(LoadImmediatePPSmall, test) { 1349 ASSEMBLER_TEST_RUN(LoadImmediatePPSmall, test) {
1348 typedef int64_t (*Int64Return)(); 1350 typedef int64_t (*Int64Return)();
1349 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1351 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1350 } 1352 }
1351 1353
1352 1354
1353 ASSEMBLER_TEST_GENERATE(LoadImmediatePPMed, assembler) { 1355 ASSEMBLER_TEST_GENERATE(LoadImmediatePPMed, assembler) {
1354 __ mov(SP, CSP); 1356 __ SetupDartSP(kTestStackSpace);
1355 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1357 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1356 __ LoadPoolPointer(PP); 1358 __ LoadPoolPointer(PP);
1357 __ LoadImmediate(R0, 0xf1234123, PP); 1359 __ LoadImmediate(R0, 0xf1234123, PP);
1358 __ PopAndUntagPP(); 1360 __ PopAndUntagPP();
1359 __ ret(); 1361 __ ret();
1360 } 1362 }
1361 1363
1362 1364
1363 ASSEMBLER_TEST_RUN(LoadImmediatePPMed, test) { 1365 ASSEMBLER_TEST_RUN(LoadImmediatePPMed, test) {
1364 typedef int64_t (*Int64Return)(); 1366 typedef int64_t (*Int64Return)();
1365 EXPECT_EQ(0xf1234123, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1367 EXPECT_EQ(0xf1234123, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1366 } 1368 }
1367 1369
1368 1370
1369 ASSEMBLER_TEST_GENERATE(LoadImmediatePPMed2, assembler) { 1371 ASSEMBLER_TEST_GENERATE(LoadImmediatePPMed2, assembler) {
1370 __ mov(SP, CSP); 1372 __ SetupDartSP(kTestStackSpace);
1371 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1373 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1372 __ LoadPoolPointer(PP); 1374 __ LoadPoolPointer(PP);
1373 __ LoadImmediate(R0, 0x4321f1234124, PP); 1375 __ LoadImmediate(R0, 0x4321f1234124, PP);
1374 __ PopAndUntagPP(); 1376 __ PopAndUntagPP();
1375 __ ret(); 1377 __ ret();
1376 } 1378 }
1377 1379
1378 1380
1379 ASSEMBLER_TEST_RUN(LoadImmediatePPMed2, test) { 1381 ASSEMBLER_TEST_RUN(LoadImmediatePPMed2, test) {
1380 typedef int64_t (*Int64Return)(); 1382 typedef int64_t (*Int64Return)();
1381 EXPECT_EQ( 1383 EXPECT_EQ(
1382 0x4321f1234124, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1384 0x4321f1234124, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1383 } 1385 }
1384 1386
1385 1387
1386 ASSEMBLER_TEST_GENERATE(LoadImmediatePPLarge, assembler) { 1388 ASSEMBLER_TEST_GENERATE(LoadImmediatePPLarge, assembler) {
1387 __ mov(SP, CSP); 1389 __ SetupDartSP(kTestStackSpace);
1388 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1390 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1389 __ LoadPoolPointer(PP); 1391 __ LoadPoolPointer(PP);
1390 __ LoadImmediate(R0, 0x9287436598237465, PP); 1392 __ LoadImmediate(R0, 0x9287436598237465, PP);
1391 __ PopAndUntagPP(); 1393 __ PopAndUntagPP();
1392 __ ret(); 1394 __ ret();
1393 } 1395 }
1394 1396
1395 1397
1396 ASSEMBLER_TEST_RUN(LoadImmediatePPLarge, test) { 1398 ASSEMBLER_TEST_RUN(LoadImmediatePPLarge, test) {
1397 typedef int64_t (*Int64Return)(); 1399 typedef int64_t (*Int64Return)();
1398 EXPECT_EQ(static_cast<int64_t>(0x9287436598237465), 1400 EXPECT_EQ(static_cast<int64_t>(0x9287436598237465),
1399 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1401 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1400 } 1402 }
1401 1403
1402 1404
1403 // LoadObject null. 1405 // LoadObject null.
1404 ASSEMBLER_TEST_GENERATE(LoadObjectNull, assembler) { 1406 ASSEMBLER_TEST_GENERATE(LoadObjectNull, assembler) {
1405 __ mov(SP, CSP); 1407 __ SetupDartSP(kTestStackSpace);
1406 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1408 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1407 __ LoadPoolPointer(PP); 1409 __ LoadPoolPointer(PP);
1408 __ LoadObject(R0, Object::null_object(), PP); 1410 __ LoadObject(R0, Object::null_object(), PP);
1409 __ PopAndUntagPP(); 1411 __ PopAndUntagPP();
1410 __ ret(); 1412 __ ret();
1411 } 1413 }
1412 1414
1413 1415
1414 ASSEMBLER_TEST_RUN(LoadObjectNull, test) { 1416 ASSEMBLER_TEST_RUN(LoadObjectNull, test) {
1415 typedef int64_t (*Int64Return)(); 1417 typedef int64_t (*Int64Return)();
1416 EXPECT_EQ(reinterpret_cast<int64_t>(Object::null()), 1418 EXPECT_EQ(reinterpret_cast<int64_t>(Object::null()),
1417 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1419 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1418 } 1420 }
1419 1421
1420 1422
1421 ASSEMBLER_TEST_GENERATE(LoadObjectTrue, assembler) { 1423 ASSEMBLER_TEST_GENERATE(LoadObjectTrue, assembler) {
1422 __ mov(SP, CSP); 1424 __ SetupDartSP(kTestStackSpace);
1423 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1425 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1424 __ LoadPoolPointer(PP); 1426 __ LoadPoolPointer(PP);
1425 __ LoadObject(R0, Bool::True(), PP); 1427 __ LoadObject(R0, Bool::True(), PP);
1426 __ PopAndUntagPP(); 1428 __ PopAndUntagPP();
1427 __ ret(); 1429 __ ret();
1428 } 1430 }
1429 1431
1430 1432
1431 ASSEMBLER_TEST_RUN(LoadObjectTrue, test) { 1433 ASSEMBLER_TEST_RUN(LoadObjectTrue, test) {
1432 typedef int64_t (*Int64Return)(); 1434 typedef int64_t (*Int64Return)();
1433 EXPECT_EQ(reinterpret_cast<int64_t>(Bool::True().raw()), 1435 EXPECT_EQ(reinterpret_cast<int64_t>(Bool::True().raw()),
1434 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry())); 1436 EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
1435 } 1437 }
1436 1438
1437 1439
1438 ASSEMBLER_TEST_GENERATE(LoadObjectFalse, assembler) { 1440 ASSEMBLER_TEST_GENERATE(LoadObjectFalse, assembler) {
1439 __ mov(SP, CSP); 1441 __ SetupDartSP(kTestStackSpace);
1440 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here. 1442 __ TagAndPushPP(); // Save caller's pool pointer and load a new one here.
1441 __ LoadPoolPointer(PP); 1443 __ LoadPoolPointer(PP);
1442 __ LoadObject(R0, Bool::False(), PP); 1444 __ LoadObject(R0, Bool::False(), PP);
1443 __ PopAndUntagPP(); 1445 __ PopAndUntagPP();
1444 __ ret(); 1446 __ ret();
1445 } 1447 }
1446 1448
1447 1449
1448 ASSEMBLER_TEST_RUN(LoadObjectFalse, test) { 1450 ASSEMBLER_TEST_RUN(LoadObjectFalse, test) {
1449 typedef int64_t (*Int64Return)(); 1451 typedef int64_t (*Int64Return)();
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 } 1592 }
1591 1593
1592 1594
1593 ASSEMBLER_TEST_RUN(Fmovdr, test) { 1595 ASSEMBLER_TEST_RUN(Fmovdr, test) {
1594 typedef double (*DoubleReturn)(); 1596 typedef double (*DoubleReturn)();
1595 EXPECT_EQ(1.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1597 EXPECT_EQ(1.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1596 } 1598 }
1597 1599
1598 1600
1599 ASSEMBLER_TEST_GENERATE(FldrdFstrdPrePostIndex, assembler) { 1601 ASSEMBLER_TEST_GENERATE(FldrdFstrdPrePostIndex, assembler) {
1600 __ mov(SP, CSP); 1602 __ SetupDartSP(kTestStackSpace);
1601 __ LoadDImmediate(V1, 42.0, kNoPP); 1603 __ LoadDImmediate(V1, 42.0, kNoPP);
1602 __ fstrd(V1, Address(SP, -1*kWordSize, Address::PreIndex)); 1604 __ fstrd(V1, Address(SP, -1*kWordSize, Address::PreIndex));
1603 __ fldrd(V0, Address(SP, 1*kWordSize, Address::PostIndex)); 1605 __ fldrd(V0, Address(SP, 1*kWordSize, Address::PostIndex));
1604 __ ret(); 1606 __ ret();
1605 } 1607 }
1606 1608
1607 1609
1608 ASSEMBLER_TEST_RUN(FldrdFstrdPrePostIndex, test) { 1610 ASSEMBLER_TEST_RUN(FldrdFstrdPrePostIndex, test) {
1609 typedef double (*DoubleReturn)(); 1611 typedef double (*DoubleReturn)();
1610 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1612 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1611 } 1613 }
1612 1614
1613 1615
1614 ASSEMBLER_TEST_GENERATE(FldrsFstrsPrePostIndex, assembler) { 1616 ASSEMBLER_TEST_GENERATE(FldrsFstrsPrePostIndex, assembler) {
1615 __ mov(SP, CSP); 1617 __ SetupDartSP(kTestStackSpace);
1616 __ LoadDImmediate(V1, 42.0, kNoPP); 1618 __ LoadDImmediate(V1, 42.0, kNoPP);
1617 __ fcvtsd(V2, V1); 1619 __ fcvtsd(V2, V1);
1618 __ fstrs(V2, Address(SP, -1*kWordSize, Address::PreIndex)); 1620 __ fstrs(V2, Address(SP, -1*kWordSize, Address::PreIndex));
1619 __ fldrs(V3, Address(SP, 1*kWordSize, Address::PostIndex)); 1621 __ fldrs(V3, Address(SP, 1*kWordSize, Address::PostIndex));
1620 __ fcvtds(V0, V3); 1622 __ fcvtds(V0, V3);
1621 __ ret(); 1623 __ ret();
1622 } 1624 }
1623 1625
1624 1626
1625 ASSEMBLER_TEST_RUN(FldrsFstrsPrePostIndex, test) { 1627 ASSEMBLER_TEST_RUN(FldrsFstrsPrePostIndex, test) {
1626 typedef double (*DoubleReturn)(); 1628 typedef double (*DoubleReturn)();
1627 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1629 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1628 } 1630 }
1629 1631
1630 1632
1631 ASSEMBLER_TEST_GENERATE(FldrqFstrqPrePostIndex, assembler) { 1633 ASSEMBLER_TEST_GENERATE(FldrqFstrqPrePostIndex, assembler) {
1632 __ mov(SP, CSP); 1634 __ SetupDartSP(kTestStackSpace);
1633 __ LoadDImmediate(V1, 21.0, kNoPP); 1635 __ LoadDImmediate(V1, 21.0, kNoPP);
1634 __ LoadDImmediate(V2, 21.0, kNoPP); 1636 __ LoadDImmediate(V2, 21.0, kNoPP);
1635 __ LoadImmediate(R1, 42, kNoPP); 1637 __ LoadImmediate(R1, 42, kNoPP);
1636 __ Push(R1); 1638 __ Push(R1);
1637 __ PushDouble(V1); 1639 __ PushDouble(V1);
1638 __ PushDouble(V2); 1640 __ PushDouble(V2);
1639 __ fldrq(V3, Address(SP, 2 * kWordSize, Address::PostIndex)); 1641 __ fldrq(V3, Address(SP, 2 * kWordSize, Address::PostIndex));
1640 __ Pop(R0); 1642 __ Pop(R0);
1641 __ fstrq(V3, Address(SP, -2 * kWordSize, Address::PreIndex)); 1643 __ fstrq(V3, Address(SP, -2 * kWordSize, Address::PreIndex));
1642 __ PopDouble(V0); 1644 __ PopDouble(V0);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1793 } 1795 }
1794 1796
1795 1797
1796 ASSEMBLER_TEST_RUN(Fsubd, test) { 1798 ASSEMBLER_TEST_RUN(Fsubd, test) {
1797 typedef double (*DoubleReturn)(); 1799 typedef double (*DoubleReturn)();
1798 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1800 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1799 } 1801 }
1800 1802
1801 1803
1802 ASSEMBLER_TEST_GENERATE(FldrdFstrdHeapTag, assembler) { 1804 ASSEMBLER_TEST_GENERATE(FldrdFstrdHeapTag, assembler) {
1803 __ mov(SP, CSP); 1805 __ SetupDartSP(kTestStackSpace);
1804 __ LoadDImmediate(V0, 43.0, kNoPP); 1806 __ LoadDImmediate(V0, 43.0, kNoPP);
1805 __ LoadDImmediate(V1, 42.0, kNoPP); 1807 __ LoadDImmediate(V1, 42.0, kNoPP);
1806 __ AddImmediate(SP, SP, -1 * kWordSize, kNoPP); 1808 __ AddImmediate(SP, SP, -1 * kWordSize, kNoPP);
1807 __ add(R2, SP, Operand(1)); 1809 __ add(R2, SP, Operand(1));
1808 __ fstrd(V1, Address(R2, -1)); 1810 __ fstrd(V1, Address(R2, -1));
1809 __ fldrd(V0, Address(R2, -1)); 1811 __ fldrd(V0, Address(R2, -1));
1810 __ AddImmediate(SP, SP, 1 * kWordSize, kNoPP); 1812 __ AddImmediate(SP, SP, 1 * kWordSize, kNoPP);
1811 __ ret(); 1813 __ ret();
1812 } 1814 }
1813 1815
1814 1816
1815 ASSEMBLER_TEST_RUN(FldrdFstrdHeapTag, test) { 1817 ASSEMBLER_TEST_RUN(FldrdFstrdHeapTag, test) {
1816 typedef double (*DoubleReturn)(); 1818 typedef double (*DoubleReturn)();
1817 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1819 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1818 } 1820 }
1819 1821
1820 1822
1821 ASSEMBLER_TEST_GENERATE(FldrdFstrdLargeIndex, assembler) { 1823 ASSEMBLER_TEST_GENERATE(FldrdFstrdLargeIndex, assembler) {
1822 __ mov(SP, CSP); 1824 __ SetupDartSP(kTestStackSpace);
1823 __ LoadDImmediate(V0, 43.0, kNoPP); 1825 __ LoadDImmediate(V0, 43.0, kNoPP);
1824 __ LoadDImmediate(V1, 42.0, kNoPP); 1826 __ LoadDImmediate(V1, 42.0, kNoPP);
1825 // Largest negative offset that can fit in the signed 9-bit immediate field. 1827 // Largest negative offset that can fit in the signed 9-bit immediate field.
1826 __ fstrd(V1, Address(SP, -32*kWordSize, Address::PreIndex)); 1828 __ fstrd(V1, Address(SP, -32*kWordSize, Address::PreIndex));
1827 // Largest positive kWordSize aligned offset that we can fit. 1829 // Largest positive kWordSize aligned offset that we can fit.
1828 __ fldrd(V0, Address(SP, 31*kWordSize, Address::PostIndex)); 1830 __ fldrd(V0, Address(SP, 31*kWordSize, Address::PostIndex));
1829 // Correction. 1831 // Correction.
1830 __ add(SP, SP, Operand(kWordSize)); // Restore SP. 1832 __ add(SP, SP, Operand(kWordSize)); // Restore SP.
1831 __ ret(); 1833 __ ret();
1832 } 1834 }
1833 1835
1834 1836
1835 ASSEMBLER_TEST_RUN(FldrdFstrdLargeIndex, test) { 1837 ASSEMBLER_TEST_RUN(FldrdFstrdLargeIndex, test) {
1836 typedef double (*DoubleReturn)(); 1838 typedef double (*DoubleReturn)();
1837 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1839 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1838 } 1840 }
1839 1841
1840 1842
1841 ASSEMBLER_TEST_GENERATE(FldrdFstrdLargeOffset, assembler) { 1843 ASSEMBLER_TEST_GENERATE(FldrdFstrdLargeOffset, assembler) {
1842 __ mov(SP, CSP); 1844 __ SetupDartSP(kTestStackSpace);
1843 __ LoadDImmediate(V0, 43.0, kNoPP); 1845 __ LoadDImmediate(V0, 43.0, kNoPP);
1844 __ LoadDImmediate(V1, 42.0, kNoPP); 1846 __ LoadDImmediate(V1, 42.0, kNoPP);
1845 __ sub(SP, SP, Operand(512*kWordSize)); 1847 __ sub(SP, SP, Operand(512*kWordSize));
1846 __ fstrd(V1, Address(SP, 512*kWordSize, Address::Offset)); 1848 __ fstrd(V1, Address(SP, 512*kWordSize, Address::Offset));
1847 __ add(SP, SP, Operand(512*kWordSize)); 1849 __ add(SP, SP, Operand(512*kWordSize));
1848 __ fldrd(V0, Address(SP)); 1850 __ fldrd(V0, Address(SP));
1849 __ ret(); 1851 __ ret();
1850 } 1852 }
1851 1853
1852 1854
1853 ASSEMBLER_TEST_RUN(FldrdFstrdLargeOffset, test) { 1855 ASSEMBLER_TEST_RUN(FldrdFstrdLargeOffset, test) {
1854 typedef double (*DoubleReturn)(); 1856 typedef double (*DoubleReturn)();
1855 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1857 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1856 } 1858 }
1857 1859
1858 1860
1859 ASSEMBLER_TEST_GENERATE(FldrdFstrdExtReg, assembler) { 1861 ASSEMBLER_TEST_GENERATE(FldrdFstrdExtReg, assembler) {
1860 __ mov(SP, CSP); 1862 __ SetupDartSP(kTestStackSpace);
1861 __ LoadDImmediate(V0, 43.0, kNoPP); 1863 __ LoadDImmediate(V0, 43.0, kNoPP);
1862 __ LoadDImmediate(V1, 42.0, kNoPP); 1864 __ LoadDImmediate(V1, 42.0, kNoPP);
1863 __ movz(R2, 0xfff8, 0); 1865 __ movz(R2, 0xfff8, 0);
1864 __ movk(R2, 0xffff, 1); // R2 <- -8 (int32_t). 1866 __ movk(R2, 0xffff, 1); // R2 <- -8 (int32_t).
1865 // This should sign extend R2, and add to SP to get address, 1867 // This should sign extend R2, and add to SP to get address,
1866 // i.e. SP - kWordSize. 1868 // i.e. SP - kWordSize.
1867 __ fstrd(V1, Address(SP, R2, SXTW)); 1869 __ fstrd(V1, Address(SP, R2, SXTW));
1868 __ sub(SP, SP, Operand(kWordSize)); 1870 __ sub(SP, SP, Operand(kWordSize));
1869 __ fldrd(V0, Address(SP)); 1871 __ fldrd(V0, Address(SP));
1870 __ add(SP, SP, Operand(kWordSize)); 1872 __ add(SP, SP, Operand(kWordSize));
1871 __ ret(); 1873 __ ret();
1872 } 1874 }
1873 1875
1874 1876
1875 ASSEMBLER_TEST_RUN(FldrdFstrdExtReg, test) { 1877 ASSEMBLER_TEST_RUN(FldrdFstrdExtReg, test) {
1876 typedef double (*DoubleReturn)(); 1878 typedef double (*DoubleReturn)();
1877 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 1879 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
1878 } 1880 }
1879 1881
1880 1882
1881 ASSEMBLER_TEST_GENERATE(FldrdFstrdScaledReg, assembler) { 1883 ASSEMBLER_TEST_GENERATE(FldrdFstrdScaledReg, assembler) {
1882 __ mov(SP, CSP); 1884 __ SetupDartSP(kTestStackSpace);
1883 __ LoadDImmediate(V0, 43.0, kNoPP); 1885 __ LoadDImmediate(V0, 43.0, kNoPP);
1884 __ LoadDImmediate(V1, 42.0, kNoPP); 1886 __ LoadDImmediate(V1, 42.0, kNoPP);
1885 __ movz(R2, 10, 0); 1887 __ movz(R2, 10, 0);
1886 __ sub(SP, SP, Operand(10*kWordSize)); 1888 __ sub(SP, SP, Operand(10*kWordSize));
1887 // Store V1 into SP + R2 * kWordSize. 1889 // Store V1 into SP + R2 * kWordSize.
1888 __ fstrd(V1, Address(SP, R2, UXTX, Address::Scaled)); 1890 __ fstrd(V1, Address(SP, R2, UXTX, Address::Scaled));
1889 __ fldrd(V0, Address(SP, R2, UXTX, Address::Scaled)); 1891 __ fldrd(V0, Address(SP, R2, UXTX, Address::Scaled));
1890 __ add(SP, SP, Operand(10*kWordSize)); 1892 __ add(SP, SP, Operand(10*kWordSize));
1891 __ ret(); 1893 __ ret();
1892 } 1894 }
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
2335 } 2337 }
2336 2338
2337 2339
2338 ASSEMBLER_TEST_RUN(Vdivd, test) { 2340 ASSEMBLER_TEST_RUN(Vdivd, test) {
2339 typedef double (*DoubleReturn)(); 2341 typedef double (*DoubleReturn)();
2340 EXPECT_EQ(2.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 2342 EXPECT_EQ(2.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
2341 } 2343 }
2342 2344
2343 2345
2344 ASSEMBLER_TEST_GENERATE(Vdupd, assembler) { 2346 ASSEMBLER_TEST_GENERATE(Vdupd, assembler) {
2345 __ mov(SP, CSP); 2347 __ SetupDartSP(kTestStackSpace);
2346 __ LoadDImmediate(V0, 21.0, kNoPP); 2348 __ LoadDImmediate(V0, 21.0, kNoPP);
2347 __ vdupd(V1, V0, 0); 2349 __ vdupd(V1, V0, 0);
2348 2350
2349 const int dword_bytes = 1 << Log2OperandSizeBytes(kDWord); 2351 const int dword_bytes = 1 << Log2OperandSizeBytes(kDWord);
2350 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord); 2352 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord);
2351 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex)); 2353 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex));
2352 2354
2353 __ fldrd(V2, Address(SP, 1 * dword_bytes, Address::PostIndex)); 2355 __ fldrd(V2, Address(SP, 1 * dword_bytes, Address::PostIndex));
2354 __ fldrd(V3, Address(SP, 1 * dword_bytes, Address::PostIndex)); 2356 __ fldrd(V3, Address(SP, 1 * dword_bytes, Address::PostIndex));
2355 2357
2356 __ faddd(V0, V2, V3); 2358 __ faddd(V0, V2, V3);
2357 __ ret(); 2359 __ ret();
2358 } 2360 }
2359 2361
2360 2362
2361 ASSEMBLER_TEST_RUN(Vdupd, test) { 2363 ASSEMBLER_TEST_RUN(Vdupd, test) {
2362 typedef double (*DoubleReturn)(); 2364 typedef double (*DoubleReturn)();
2363 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 2365 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
2364 } 2366 }
2365 2367
2366 2368
2367 ASSEMBLER_TEST_GENERATE(Vdups, assembler) { 2369 ASSEMBLER_TEST_GENERATE(Vdups, assembler) {
2368 __ mov(SP, CSP); 2370 __ SetupDartSP(kTestStackSpace);
2369 __ LoadDImmediate(V0, 21.0, kNoPP); 2371 __ LoadDImmediate(V0, 21.0, kNoPP);
2370 __ fcvtsd(V0, V0); 2372 __ fcvtsd(V0, V0);
2371 __ vdups(V1, V0, 0); 2373 __ vdups(V1, V0, 0);
2372 2374
2373 const int sword_bytes = 1 << Log2OperandSizeBytes(kSWord); 2375 const int sword_bytes = 1 << Log2OperandSizeBytes(kSWord);
2374 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord); 2376 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord);
2375 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex)); 2377 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex));
2376 2378
2377 __ fldrs(V3, Address(SP, 1 * sword_bytes, Address::PostIndex)); 2379 __ fldrs(V3, Address(SP, 1 * sword_bytes, Address::PostIndex));
2378 __ fldrs(V2, Address(SP, 1 * sword_bytes, Address::PostIndex)); 2380 __ fldrs(V2, Address(SP, 1 * sword_bytes, Address::PostIndex));
(...skipping 12 matching lines...) Expand all
2391 } 2393 }
2392 2394
2393 2395
2394 ASSEMBLER_TEST_RUN(Vdups, test) { 2396 ASSEMBLER_TEST_RUN(Vdups, test) {
2395 typedef double (*DoubleReturn)(); 2397 typedef double (*DoubleReturn)();
2396 EXPECT_EQ(84.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 2398 EXPECT_EQ(84.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
2397 } 2399 }
2398 2400
2399 2401
2400 ASSEMBLER_TEST_GENERATE(Vinsd, assembler) { 2402 ASSEMBLER_TEST_GENERATE(Vinsd, assembler) {
2401 __ mov(SP, CSP); 2403 __ SetupDartSP(kTestStackSpace);
2402 __ LoadDImmediate(V5, 42.0, kNoPP); 2404 __ LoadDImmediate(V5, 42.0, kNoPP);
2403 __ vinsd(V1, 1, V5, 0); // V1[1] <- V0[0]. 2405 __ vinsd(V1, 1, V5, 0); // V1[1] <- V0[0].
2404 2406
2405 const int dword_bytes = 1 << Log2OperandSizeBytes(kDWord); 2407 const int dword_bytes = 1 << Log2OperandSizeBytes(kDWord);
2406 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord); 2408 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord);
2407 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex)); 2409 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex));
2408 2410
2409 __ fldrd(V2, Address(SP, 1 * dword_bytes, Address::PostIndex)); 2411 __ fldrd(V2, Address(SP, 1 * dword_bytes, Address::PostIndex));
2410 __ fldrd(V3, Address(SP, 1 * dword_bytes, Address::PostIndex)); 2412 __ fldrd(V3, Address(SP, 1 * dword_bytes, Address::PostIndex));
2411 2413
2412 __ fmovdd(V0, V3); 2414 __ fmovdd(V0, V3);
2413 __ ret(); 2415 __ ret();
2414 } 2416 }
2415 2417
2416 2418
2417 ASSEMBLER_TEST_RUN(Vinsd, test) { 2419 ASSEMBLER_TEST_RUN(Vinsd, test) {
2418 typedef double (*DoubleReturn)(); 2420 typedef double (*DoubleReturn)();
2419 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry())); 2421 EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
2420 } 2422 }
2421 2423
2422 2424
2423 ASSEMBLER_TEST_GENERATE(Vinss, assembler) { 2425 ASSEMBLER_TEST_GENERATE(Vinss, assembler) {
2424 __ mov(SP, CSP); 2426 __ SetupDartSP(kTestStackSpace);
2425 __ LoadDImmediate(V0, 21.0, kNoPP); 2427 __ LoadDImmediate(V0, 21.0, kNoPP);
2426 __ fcvtsd(V0, V0); 2428 __ fcvtsd(V0, V0);
2427 __ vinss(V1, 3, V0, 0); 2429 __ vinss(V1, 3, V0, 0);
2428 __ vinss(V1, 1, V0, 0); 2430 __ vinss(V1, 1, V0, 0);
2429 2431
2430 const int sword_bytes = 1 << Log2OperandSizeBytes(kSWord); 2432 const int sword_bytes = 1 << Log2OperandSizeBytes(kSWord);
2431 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord); 2433 const int qword_bytes = 1 << Log2OperandSizeBytes(kQWord);
2432 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex)); 2434 __ fstrq(V1, Address(SP, -1 * qword_bytes, Address::PreIndex));
2433 2435
2434 __ fldrs(V3, Address(SP, 1 * sword_bytes, Address::PostIndex)); 2436 __ fldrs(V3, Address(SP, 1 * sword_bytes, Address::PostIndex));
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001); 3227 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001);
3226 } 3228 }
3227 3229
3228 3230
3229 // Called from assembler_test.cc. 3231 // Called from assembler_test.cc.
3230 // LR: return address. 3232 // LR: return address.
3231 // R0: context. 3233 // R0: context.
3232 // R1: value. 3234 // R1: value.
3233 // R2: growable array. 3235 // R2: growable array.
3234 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) { 3236 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) {
3235 __ mov(SP, CSP); 3237 __ SetupDartSP(kTestStackSpace);
3236 __ TagAndPushPP(); 3238 __ TagAndPushPP();
3237 __ LoadPoolPointer(PP); 3239 __ LoadPoolPointer(PP);
3238 __ Push(CTX); 3240 __ Push(CTX);
3239 __ Push(LR); 3241 __ Push(LR);
3240 __ mov(CTX, R0); 3242 __ mov(CTX, R0);
3241 __ StoreIntoObject(R2, 3243 __ StoreIntoObject(R2,
3242 FieldAddress(R2, GrowableObjectArray::data_offset()), 3244 FieldAddress(R2, GrowableObjectArray::data_offset()),
3243 R1); 3245 R1);
3244 __ Pop(LR); 3246 __ Pop(LR);
3245 __ Pop(CTX); 3247 __ Pop(CTX);
3246 __ PopAndUntagPP(); 3248 __ PopAndUntagPP();
3247 __ ret(); 3249 __ ret();
3248 } 3250 }
3249 3251
3250 } // namespace dart 3252 } // namespace dart
3251 3253
3252 #endif // defined(TARGET_ARCH_ARM64) 3254 #endif // defined(TARGET_ARCH_ARM64)
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64.h ('k') | runtime/vm/stub_code_arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698