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

Side by Side Diff: src/crankshaft/s390/lithium-s390.cc

Issue 2561673002: s390: Remove RSubI on s390 and optimize ConstantI (Closed)
Patch Set: Created 4 years 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 | « src/crankshaft/s390/lithium-s390.h ('k') | src/s390/macro-assembler-s390.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 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/crankshaft/s390/lithium-s390.h" 5 #include "src/crankshaft/s390/lithium-s390.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/crankshaft/hydrogen-osr.h" 9 #include "src/crankshaft/hydrogen-osr.h"
10 #include "src/crankshaft/lithium-inl.h" 10 #include "src/crankshaft/lithium-inl.h"
11 #include "src/crankshaft/s390/lithium-codegen-s390.h" 11 #include "src/crankshaft/s390/lithium-codegen-s390.h"
12 12
13 namespace v8 { 13 namespace v8 {
14 namespace internal { 14 namespace internal {
15 15
16 #define DEFINE_COMPILE(type) \ 16 #define DEFINE_COMPILE(type) \
17 void L##type::CompileToNative(LCodeGen* generator) { \ 17 void L##type::CompileToNative(LCodeGen* generator) { \
18 generator->Do##type(this); \ 18 generator->Do##type(this); \
19 } 19 }
20 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE) 20 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE)
21 #undef DEFINE_COMPILE 21 #undef DEFINE_COMPILE
22 22
23 const char* LInstruction::GetOpcodeName(LInstruction::Opcode op) {
24 switch (op) {
JoranSiu 2016/12/07 21:01:42 What is the purpose of this new function? I don't
25 #define DECLARE_OPCODE(type) \
26 case Opcode::k##type: \
27 return #type;
28 LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE)
29 #undef DECLARE_OPCODE
30 default:
31 return NULL;
32 }
33 }
34
23 #ifdef DEBUG 35 #ifdef DEBUG
24 void LInstruction::VerifyCall() { 36 void LInstruction::VerifyCall() {
25 // Call instructions can use only fixed registers as temporaries and 37 // Call instructions can use only fixed registers as temporaries and
26 // outputs because all registers are blocked by the calling convention. 38 // outputs because all registers are blocked by the calling convention.
27 // Inputs operands must use a fixed register or use-at-start policy or 39 // Inputs operands must use a fixed register or use-at-start policy or
28 // a non-register policy. 40 // a non-register policy.
29 DCHECK(Output() == NULL || LUnallocated::cast(Output())->HasFixedPolicy() || 41 DCHECK(Output() == NULL || LUnallocated::cast(Output())->HasFixedPolicy() ||
30 !LUnallocated::cast(Output())->HasRegisterPolicy()); 42 !LUnallocated::cast(Output())->HasRegisterPolicy());
31 for (UseIterator it(this); !it.Done(); it.Advance()) { 43 for (UseIterator it(this); !it.Done(); it.Advance()) {
32 LUnallocated* operand = LUnallocated::cast(it.Current()); 44 LUnallocated* operand = LUnallocated::cast(it.Current());
(...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 } else { 1358 } else {
1347 return DoArithmeticT(Token::MUL, instr); 1359 return DoArithmeticT(Token::MUL, instr);
1348 } 1360 }
1349 } 1361 }
1350 1362
1351 LInstruction* LChunkBuilder::DoSub(HSub* instr) { 1363 LInstruction* LChunkBuilder::DoSub(HSub* instr) {
1352 if (instr->representation().IsSmiOrInteger32()) { 1364 if (instr->representation().IsSmiOrInteger32()) {
1353 DCHECK(instr->left()->representation().Equals(instr->representation())); 1365 DCHECK(instr->left()->representation().Equals(instr->representation()));
1354 DCHECK(instr->right()->representation().Equals(instr->representation())); 1366 DCHECK(instr->right()->representation().Equals(instr->representation()));
1355 1367
1356 if (instr->left()->IsConstant() &&
1357 !instr->CheckFlag(HValue::kCanOverflow)) {
1358 // If lhs is constant, do reverse subtraction instead.
1359 return DoRSub(instr);
1360 }
1361
1362 LOperand* left = UseRegisterAtStart(instr->left()); 1368 LOperand* left = UseRegisterAtStart(instr->left());
1363 LOperand* right = UseOrConstantAtStart(instr->right()); 1369 LOperand* right = UseOrConstantAtStart(instr->right());
1364 LSubI* sub = new (zone()) LSubI(left, right); 1370 LSubI* sub = new (zone()) LSubI(left, right);
1365 LInstruction* result = DefineAsRegister(sub); 1371 LInstruction* result = DefineAsRegister(sub);
1366 if (instr->CheckFlag(HValue::kCanOverflow)) { 1372 if (instr->CheckFlag(HValue::kCanOverflow)) {
1367 result = AssignEnvironment(result); 1373 result = AssignEnvironment(result);
1368 } 1374 }
1369 return result; 1375 return result;
1370 } else if (instr->representation().IsDouble()) { 1376 } else if (instr->representation().IsDouble()) {
1371 return DoArithmeticD(Token::SUB, instr); 1377 return DoArithmeticD(Token::SUB, instr);
1372 } else { 1378 } else {
1373 return DoArithmeticT(Token::SUB, instr); 1379 return DoArithmeticT(Token::SUB, instr);
1374 } 1380 }
1375 } 1381 }
1376 1382
1377 LInstruction* LChunkBuilder::DoRSub(HSub* instr) {
1378 DCHECK(instr->representation().IsSmiOrInteger32());
1379 DCHECK(instr->left()->representation().Equals(instr->representation()));
1380 DCHECK(instr->right()->representation().Equals(instr->representation()));
1381 DCHECK(!instr->CheckFlag(HValue::kCanOverflow));
1382
1383 // Note: The lhs of the subtraction becomes the rhs of the
1384 // reverse-subtraction.
1385 LOperand* left = UseRegisterAtStart(instr->right());
1386 LOperand* right = UseOrConstantAtStart(instr->left());
1387 LRSubI* rsb = new (zone()) LRSubI(left, right);
1388 LInstruction* result = DefineAsRegister(rsb);
1389 return result;
1390 }
1391
1392 LInstruction* LChunkBuilder::DoMultiplyAdd(HMul* mul, HValue* addend) { 1383 LInstruction* LChunkBuilder::DoMultiplyAdd(HMul* mul, HValue* addend) {
1393 LOperand* multiplier_op = UseRegister(mul->left()); 1384 LOperand* multiplier_op = UseRegister(mul->left());
1394 LOperand* multiplicand_op = UseRegister(mul->right()); 1385 LOperand* multiplicand_op = UseRegister(mul->right());
1395 LOperand* addend_op = UseRegister(addend); 1386 LOperand* addend_op = UseRegister(addend);
1396 return DefineAsRegister( 1387 return DefineAsRegister(
1397 new (zone()) LMultiplyAddD(addend_op, multiplier_op, multiplicand_op)); 1388 new (zone()) LMultiplyAddD(addend_op, multiplier_op, multiplicand_op));
1398 } 1389 }
1399 1390
1400 LInstruction* LChunkBuilder::DoMultiplySub(HValue* minuend, HMul* mul) { 1391 LInstruction* LChunkBuilder::DoMultiplySub(HValue* minuend, HMul* mul) {
1401 LOperand* minuend_op = UseRegister(minuend); 1392 LOperand* minuend_op = UseRegister(minuend);
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
2166 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { 2157 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) {
2167 LOperand* object = UseRegister(instr->object()); 2158 LOperand* object = UseRegister(instr->object());
2168 LOperand* index = UseTempRegister(instr->index()); 2159 LOperand* index = UseTempRegister(instr->index());
2169 LLoadFieldByIndex* load = new (zone()) LLoadFieldByIndex(object, index); 2160 LLoadFieldByIndex* load = new (zone()) LLoadFieldByIndex(object, index);
2170 LInstruction* result = DefineSameAsFirst(load); 2161 LInstruction* result = DefineSameAsFirst(load);
2171 return AssignPointerMap(result); 2162 return AssignPointerMap(result);
2172 } 2163 }
2173 2164
2174 } // namespace internal 2165 } // namespace internal
2175 } // namespace v8 2166 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/s390/lithium-s390.h ('k') | src/s390/macro-assembler-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698