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

Side by Side Diff: src/compiler/mips64/code-generator-mips64.cc

Issue 1779713009: Implement optional turbofan UnalignedLoad and UnalignedStore operators (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Unaligned access simulate using load/shift/or and store/shift/and Created 4 years, 8 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/ast/scopes.h" 5 #include "src/ast/scopes.h"
6 #include "src/compiler/code-generator.h" 6 #include "src/compiler/code-generator.h"
7 #include "src/compiler/code-generator-impl.h" 7 #include "src/compiler/code-generator-impl.h"
8 #include "src/compiler/gap-resolver.h" 8 #include "src/compiler/gap-resolver.h"
9 #include "src/compiler/node-matchers.h" 9 #include "src/compiler/node-matchers.h"
10 #include "src/compiler/osr.h" 10 #include "src/compiler/osr.h"
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 break; 1460 break;
1461 case kMips64Lb: 1461 case kMips64Lb:
1462 __ lb(i.OutputRegister(), i.MemoryOperand()); 1462 __ lb(i.OutputRegister(), i.MemoryOperand());
1463 break; 1463 break;
1464 case kMips64Sb: 1464 case kMips64Sb:
1465 __ sb(i.InputRegister(2), i.MemoryOperand()); 1465 __ sb(i.InputRegister(2), i.MemoryOperand());
1466 break; 1466 break;
1467 case kMips64Lhu: 1467 case kMips64Lhu:
1468 __ lhu(i.OutputRegister(), i.MemoryOperand()); 1468 __ lhu(i.OutputRegister(), i.MemoryOperand());
1469 break; 1469 break;
1470 case kMips64Ulhu:
1471 __ Ulhu(i.OutputRegister(), i.MemoryOperand());
1472 break;
1470 case kMips64Lh: 1473 case kMips64Lh:
1471 __ lh(i.OutputRegister(), i.MemoryOperand()); 1474 __ lh(i.OutputRegister(), i.MemoryOperand());
1472 break; 1475 break;
1476 case kMips64Ulh:
1477 __ Ulh(i.OutputRegister(), i.MemoryOperand());
1478 break;
1473 case kMips64Sh: 1479 case kMips64Sh:
1474 __ sh(i.InputRegister(2), i.MemoryOperand()); 1480 __ sh(i.InputRegister(2), i.MemoryOperand());
1475 break; 1481 break;
1482 case kMips64Ush:
1483 __ Ush(i.InputRegister(2), i.MemoryOperand(), kScratchReg);
1484 break;
1476 case kMips64Lw: 1485 case kMips64Lw:
1477 __ lw(i.OutputRegister(), i.MemoryOperand()); 1486 __ lw(i.OutputRegister(), i.MemoryOperand());
1478 break; 1487 break;
1488 case kMips64Ulw:
1489 __ Ulw(i.OutputRegister(), i.MemoryOperand());
1490 break;
1491 case kMips64Lwu:
1492 __ lwu(i.OutputRegister(), i.MemoryOperand());
1493 break;
1494 case kMips64Ulwu:
1495 __ Ulwu(i.OutputRegister(), i.MemoryOperand());
1496 break;
1479 case kMips64Ld: 1497 case kMips64Ld:
1480 __ ld(i.OutputRegister(), i.MemoryOperand()); 1498 __ ld(i.OutputRegister(), i.MemoryOperand());
1481 break; 1499 break;
1500 case kMips64Uld:
1501 __ Uld(i.OutputRegister(), i.MemoryOperand());
1502 break;
1482 case kMips64Sw: 1503 case kMips64Sw:
1483 __ sw(i.InputRegister(2), i.MemoryOperand()); 1504 __ sw(i.InputRegister(2), i.MemoryOperand());
1484 break; 1505 break;
1506 case kMips64Usw:
1507 __ Usw(i.InputRegister(2), i.MemoryOperand());
1508 break;
1485 case kMips64Sd: 1509 case kMips64Sd:
1486 __ sd(i.InputRegister(2), i.MemoryOperand()); 1510 __ sd(i.InputRegister(2), i.MemoryOperand());
1487 break; 1511 break;
1512 case kMips64Usd:
1513 __ Usd(i.InputRegister(2), i.MemoryOperand());
1514 break;
1488 case kMips64Lwc1: { 1515 case kMips64Lwc1: {
1489 __ lwc1(i.OutputSingleRegister(), i.MemoryOperand()); 1516 __ lwc1(i.OutputSingleRegister(), i.MemoryOperand());
1490 break; 1517 break;
1491 } 1518 }
1519 case kMips64Ulwc1: {
1520 __ Ulwc1(i.OutputSingleRegister(), i.MemoryOperand(), kScratchReg);
1521 break;
1522 }
1492 case kMips64Swc1: { 1523 case kMips64Swc1: {
1493 size_t index = 0; 1524 size_t index = 0;
1494 MemOperand operand = i.MemoryOperand(&index); 1525 MemOperand operand = i.MemoryOperand(&index);
1495 __ swc1(i.InputSingleRegister(index), operand); 1526 __ swc1(i.InputSingleRegister(index), operand);
1496 break; 1527 break;
1497 } 1528 }
1498 case kMips64Ldc1: 1529 case kMips64Uswc1: {
1530 size_t index = 0;
1531 MemOperand operand = i.MemoryOperand(&index);
1532 __ Uswc1(i.InputSingleRegister(index), operand, kScratchReg);
1533 break;
1534 }
1535 case kMips64Ldc1: {
1499 __ ldc1(i.OutputDoubleRegister(), i.MemoryOperand()); 1536 __ ldc1(i.OutputDoubleRegister(), i.MemoryOperand());
1500 break; 1537 break;
1538 }
1539 case kMips64Uldc1:
1540 __ Uldc1(i.OutputDoubleRegister(), i.MemoryOperand(), kScratchReg);
1541 break;
1501 case kMips64Sdc1: 1542 case kMips64Sdc1:
1502 __ sdc1(i.InputDoubleRegister(2), i.MemoryOperand()); 1543 __ sdc1(i.InputDoubleRegister(2), i.MemoryOperand());
1503 break; 1544 break;
1545 case kMips64Usdc1:
1546 __ Usdc1(i.InputDoubleRegister(2), i.MemoryOperand(), kScratchReg);
1547 break;
1504 case kMips64Push: 1548 case kMips64Push:
1505 if (instr->InputAt(0)->IsDoubleRegister()) { 1549 if (instr->InputAt(0)->IsDoubleRegister()) {
1506 __ sdc1(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize)); 1550 __ sdc1(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize));
1507 __ Subu(sp, sp, Operand(kDoubleSize)); 1551 __ Subu(sp, sp, Operand(kDoubleSize));
1508 frame_access_state()->IncreaseSPDelta(kDoubleSize / kPointerSize); 1552 frame_access_state()->IncreaseSPDelta(kDoubleSize / kPointerSize);
1509 } else { 1553 } else {
1510 __ Push(i.InputRegister(0)); 1554 __ Push(i.InputRegister(0));
1511 frame_access_state()->IncreaseSPDelta(1); 1555 frame_access_state()->IncreaseSPDelta(1);
1512 } 1556 }
1513 break; 1557 break;
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 padding_size -= v8::internal::Assembler::kInstrSize; 2227 padding_size -= v8::internal::Assembler::kInstrSize;
2184 } 2228 }
2185 } 2229 }
2186 } 2230 }
2187 2231
2188 #undef __ 2232 #undef __
2189 2233
2190 } // namespace compiler 2234 } // namespace compiler
2191 } // namespace internal 2235 } // namespace internal
2192 } // namespace v8 2236 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698