OLD | NEW |
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/compilation-info.h" | 7 #include "src/compilation-info.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 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1240 int clearBitRight = i.InputInt32(3); | 1240 int clearBitRight = i.InputInt32(3); |
1241 __ rll(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); | 1241 __ rll(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); |
1242 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBitLeft)); | 1242 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBitLeft)); |
1243 __ srlg(i.OutputRegister(), i.OutputRegister(), | 1243 __ srlg(i.OutputRegister(), i.OutputRegister(), |
1244 Operand((clearBitLeft + clearBitRight))); | 1244 Operand((clearBitLeft + clearBitRight))); |
1245 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBitRight)); | 1245 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBitRight)); |
1246 } | 1246 } |
1247 break; | 1247 break; |
1248 #if V8_TARGET_ARCH_S390X | 1248 #if V8_TARGET_ARCH_S390X |
1249 case kS390_RotLeftAndClear64: | 1249 case kS390_RotLeftAndClear64: |
1250 UNIMPLEMENTED(); // Find correct instruction | 1250 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) { |
| 1251 int shiftAmount = i.InputInt32(1); |
| 1252 int endBit = 63 - shiftAmount; |
| 1253 int startBit = 63 - i.InputInt32(2); |
| 1254 __ risbg(i.OutputRegister(), i.InputRegister(0), Operand(startBit), |
| 1255 Operand(endBit), Operand(shiftAmount), true); |
| 1256 } else { |
| 1257 int shiftAmount = i.InputInt32(1); |
| 1258 int clearBit = 63 - i.InputInt32(2); |
| 1259 __ rllg(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); |
| 1260 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); |
| 1261 __ srlg(i.OutputRegister(), i.OutputRegister(), |
| 1262 Operand(clearBit + shiftAmount)); |
| 1263 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(shiftAmount)); |
| 1264 } |
1251 break; | 1265 break; |
1252 case kS390_RotLeftAndClearLeft64: | 1266 case kS390_RotLeftAndClearLeft64: |
1253 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) { | 1267 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) { |
1254 int shiftAmount = i.InputInt32(1); | 1268 int shiftAmount = i.InputInt32(1); |
1255 int endBit = 63; | 1269 int endBit = 63; |
1256 int startBit = 63 - i.InputInt32(2); | 1270 int startBit = 63 - i.InputInt32(2); |
1257 __ risbg(i.OutputRegister(), i.InputRegister(0), Operand(startBit), | 1271 __ risbg(i.OutputRegister(), i.InputRegister(0), Operand(startBit), |
1258 Operand(endBit), Operand(shiftAmount), true); | 1272 Operand(endBit), Operand(shiftAmount), true); |
1259 } else { | 1273 } else { |
1260 int shiftAmount = i.InputInt32(1); | 1274 int shiftAmount = i.InputInt32(1); |
(...skipping 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2549 padding_size -= 2; | 2563 padding_size -= 2; |
2550 } | 2564 } |
2551 } | 2565 } |
2552 } | 2566 } |
2553 | 2567 |
2554 #undef __ | 2568 #undef __ |
2555 | 2569 |
2556 } // namespace compiler | 2570 } // namespace compiler |
2557 } // namespace internal | 2571 } // namespace internal |
2558 } // namespace v8 | 2572 } // namespace v8 |
OLD | NEW |