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

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

Issue 2025083002: Version 5.1.281.58 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@5.1
Patch Set: Created 4 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
« no previous file with comments | « include/v8-version.h ('k') | src/s390/macro-assembler-s390.h » ('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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/compiler/code-generator-impl.h" 8 #include "src/compiler/code-generator-impl.h"
9 #include "src/compiler/gap-resolver.h" 9 #include "src/compiler/gap-resolver.h"
10 #include "src/compiler/node-matchers.h" 10 #include "src/compiler/node-matchers.h"
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 case kS390_Tst64: 1300 case kS390_Tst64:
1301 if (HasRegisterInput(instr, 1)) { 1301 if (HasRegisterInput(instr, 1)) {
1302 __ AndP(r0, i.InputRegister(0), i.InputRegister(1)); 1302 __ AndP(r0, i.InputRegister(0), i.InputRegister(1));
1303 } else { 1303 } else {
1304 __ AndP(r0, i.InputRegister(0), i.InputImmediate(1)); 1304 __ AndP(r0, i.InputRegister(0), i.InputImmediate(1));
1305 } 1305 }
1306 break; 1306 break;
1307 #endif 1307 #endif
1308 case kS390_Push: 1308 case kS390_Push:
1309 if (instr->InputAt(0)->IsDoubleRegister()) { 1309 if (instr->InputAt(0)->IsDoubleRegister()) {
1310 __ StoreDouble(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize));
1311 __ lay(sp, MemOperand(sp, -kDoubleSize)); 1310 __ lay(sp, MemOperand(sp, -kDoubleSize));
1311 __ StoreDouble(i.InputDoubleRegister(0), MemOperand(sp));
1312 frame_access_state()->IncreaseSPDelta(kDoubleSize / kPointerSize); 1312 frame_access_state()->IncreaseSPDelta(kDoubleSize / kPointerSize);
1313 } else { 1313 } else {
1314 __ Push(i.InputRegister(0)); 1314 __ Push(i.InputRegister(0));
1315 frame_access_state()->IncreaseSPDelta(1); 1315 frame_access_state()->IncreaseSPDelta(1);
1316 } 1316 }
1317 break; 1317 break;
1318 case kS390_PushFrame: { 1318 case kS390_PushFrame: {
1319 int num_slots = i.InputInt32(1); 1319 int num_slots = i.InputInt32(1);
1320 __ lay(sp, MemOperand(sp, -num_slots * kPointerSize));
1320 if (instr->InputAt(0)->IsDoubleRegister()) { 1321 if (instr->InputAt(0)->IsDoubleRegister()) {
1321 __ StoreDouble(i.InputDoubleRegister(0), 1322 __ StoreDouble(i.InputDoubleRegister(0),
1322 MemOperand(sp, -num_slots * kPointerSize)); 1323 MemOperand(sp));
1323 } else { 1324 } else {
1324 __ StoreP(i.InputRegister(0), 1325 __ StoreP(i.InputRegister(0),
1325 MemOperand(sp, -num_slots * kPointerSize)); 1326 MemOperand(sp));
1326 } 1327 }
1327 __ lay(sp, MemOperand(sp, -num_slots * kPointerSize));
1328 break; 1328 break;
1329 } 1329 }
1330 case kS390_StoreToStackSlot: { 1330 case kS390_StoreToStackSlot: {
1331 int slot = i.InputInt32(1); 1331 int slot = i.InputInt32(1);
1332 if (instr->InputAt(0)->IsDoubleRegister()) { 1332 if (instr->InputAt(0)->IsDoubleRegister()) {
1333 __ StoreDouble(i.InputDoubleRegister(0), 1333 __ StoreDouble(i.InputDoubleRegister(0),
1334 MemOperand(sp, slot * kPointerSize)); 1334 MemOperand(sp, slot * kPointerSize));
1335 } else { 1335 } else {
1336 __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); 1336 __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize));
1337 } 1337 }
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 break; 1492 break;
1493 } 1493 }
1494 #endif 1494 #endif
1495 case kS390_DoubleToFloat32: 1495 case kS390_DoubleToFloat32:
1496 __ ledbr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1496 __ ledbr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1497 break; 1497 break;
1498 case kS390_Float32ToDouble: 1498 case kS390_Float32ToDouble:
1499 __ ldebr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1499 __ ldebr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1500 break; 1500 break;
1501 case kS390_DoubleExtractLowWord32: 1501 case kS390_DoubleExtractLowWord32:
1502 // TODO(john.yan): this can cause problem when interrupting, 1502 __ lgdr(i.OutputRegister(), i.InputDoubleRegister(0));
1503 // use freg->greg instruction 1503 __ llgfr(i.OutputRegister(), i.OutputRegister());
1504 __ stdy(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize));
1505 __ LoadlW(i.OutputRegister(),
1506 MemOperand(sp, -kDoubleSize + Register::kMantissaOffset));
1507 break; 1504 break;
1508 case kS390_DoubleExtractHighWord32: 1505 case kS390_DoubleExtractHighWord32:
1509 // TODO(john.yan): this can cause problem when interrupting, 1506 __ lgdr(i.OutputRegister(), i.InputDoubleRegister(0));
1510 // use freg->greg instruction 1507 __ srlg(i.OutputRegister(), i.OutputRegister(), Operand(32));
1511 __ stdy(i.InputDoubleRegister(0), MemOperand(sp, -kDoubleSize));
1512 __ LoadlW(i.OutputRegister(),
1513 MemOperand(sp, -kDoubleSize + Register::kExponentOffset));
1514 break; 1508 break;
1515 case kS390_DoubleInsertLowWord32: 1509 case kS390_DoubleInsertLowWord32:
1516 __ InsertDoubleLow(i.OutputDoubleRegister(), i.InputRegister(1)); 1510 __ lgdr(kScratchReg, i.OutputDoubleRegister());
1511 __ lr(kScratchReg, i.InputRegister(1));
1512 __ ldgr(i.OutputDoubleRegister(), kScratchReg);
1517 break; 1513 break;
1518 case kS390_DoubleInsertHighWord32: 1514 case kS390_DoubleInsertHighWord32:
1519 __ InsertDoubleHigh(i.OutputDoubleRegister(), i.InputRegister(1)); 1515 __ sllg(kScratchReg, i.InputRegister(1), Operand(32));
1516 __ lgdr(r0, i.OutputDoubleRegister());
1517 __ lr(kScratchReg, r0);
1518 __ ldgr(i.OutputDoubleRegister(), kScratchReg);
1520 break; 1519 break;
1521 case kS390_DoubleConstruct: 1520 case kS390_DoubleConstruct:
1522 // TODO(john.yan): this can cause problem when interrupting, 1521 __ sllg(kScratchReg, i.InputRegister(0), Operand(32));
1523 // use greg->freg instruction 1522 __ lr(kScratchReg, i.InputRegister(1));
1524 #if V8_TARGET_LITTLE_ENDIAN 1523
1525 __ StoreW(i.InputRegister(0), MemOperand(sp, -kDoubleSize / 2)); 1524 // Bitwise convert from GPR to FPR
1526 __ StoreW(i.InputRegister(1), MemOperand(sp, -kDoubleSize)); 1525 __ ldgr(i.OutputDoubleRegister(), kScratchReg);
1527 #else
1528 __ StoreW(i.InputRegister(1), MemOperand(sp, -kDoubleSize / 2));
1529 __ StoreW(i.InputRegister(0), MemOperand(sp, -kDoubleSize));
1530 #endif
1531 __ ldy(i.OutputDoubleRegister(), MemOperand(sp, -kDoubleSize));
1532 break; 1526 break;
1533 case kS390_LoadWordS8: 1527 case kS390_LoadWordS8:
1534 ASSEMBLE_LOAD_INTEGER(LoadlB); 1528 ASSEMBLE_LOAD_INTEGER(LoadlB);
1535 #if V8_TARGET_ARCH_S390X 1529 #if V8_TARGET_ARCH_S390X
1536 __ lgbr(i.OutputRegister(), i.OutputRegister()); 1530 __ lgbr(i.OutputRegister(), i.OutputRegister());
1537 #else 1531 #else
1538 __ lbr(i.OutputRegister(), i.OutputRegister()); 1532 __ lbr(i.OutputRegister(), i.OutputRegister());
1539 #endif 1533 #endif
1540 break; 1534 break;
1541 case kS390_BitcastFloat32ToInt32: 1535 case kS390_BitcastFloat32ToInt32:
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
2076 padding_size -= 2; 2070 padding_size -= 2;
2077 } 2071 }
2078 } 2072 }
2079 } 2073 }
2080 2074
2081 #undef __ 2075 #undef __
2082 2076
2083 } // namespace compiler 2077 } // namespace compiler
2084 } // namespace internal 2078 } // namespace internal
2085 } // namespace v8 2079 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8-version.h ('k') | src/s390/macro-assembler-s390.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698