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

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

Issue 2649113007: s390: TF Codegen Optimization (Closed)
Patch Set: remove 2 unnecessary unreachables Created 3 years, 11 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 | « no previous file | src/compiler/s390/instruction-codes-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/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 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 break; 295 break;
296 } 296 }
297 break; 297 break;
298 default: 298 default:
299 break; 299 break;
300 } 300 }
301 UNREACHABLE(); 301 UNREACHABLE();
302 return kNoCondition; 302 return kNoCondition;
303 } 303 }
304 304
305 typedef void (MacroAssembler::*RRTypeInstr)(Register, Register);
306 typedef void (MacroAssembler::*RMTypeInstr)(Register, const MemOperand&);
307 typedef void (MacroAssembler::*RITypeInstr)(Register, const Operand&);
308 typedef void (MacroAssembler::*RRRTypeInstr)(Register, Register, Register);
309 typedef void (MacroAssembler::*RRMTypeInstr)(Register, Register,
310 const MemOperand&);
311 typedef void (MacroAssembler::*RRITypeInstr)(Register, Register,
312 const Operand&);
313
314 #define CHECK_AND_ZERO_EXT_OUTPUT(num) \
315 { \
316 CHECK(HasImmediateInput(instr, (num))); \
317 int doZeroExt = i.InputInt32(num); \
318 if (doZeroExt) masm->LoadlW(i.OutputRegister(), i.OutputRegister()); \
319 }
320
321 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
322 Instruction* instr, RRTypeInstr rr_instr,
323 RMTypeInstr rm_instr, RITypeInstr ri_instr) {
324 CHECK(i.OutputRegister().is(i.InputRegister(0)));
325 AddressingMode mode = AddressingModeField::decode(instr->opcode());
326 int zeroExtIndex = 2;
327 if (mode != kMode_None) {
328 size_t first_index = 1;
329 MemOperand operand = i.MemoryOperand(&mode, &first_index);
330 zeroExtIndex = first_index;
331 CHECK(rm_instr != NULL);
332 (masm->*rm_instr)(i.OutputRegister(), operand);
333 } else if (HasRegisterInput(instr, 1)) {
334 (masm->*rr_instr)(i.OutputRegister(), i.InputRegister(1));
335 } else if (HasImmediateInput(instr, 1)) {
336 (masm->*ri_instr)(i.OutputRegister(), i.InputImmediate(1));
337 } else if (HasStackSlotInput(instr, 1)) {
338 (masm->*rm_instr)(i.OutputRegister(), i.InputStackSlot32(1));
339 } else {
340 UNREACHABLE();
341 }
342 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
343 }
344
345 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
346 Instruction* instr, RRRTypeInstr rrr_instr,
347 RMTypeInstr rm_instr, RITypeInstr ri_instr) {
348 AddressingMode mode = AddressingModeField::decode(instr->opcode());
349 int zeroExtIndex = 2;
350 if (mode != kMode_None) {
351 CHECK(i.OutputRegister().is(i.InputRegister(0)));
352 size_t first_index = 1;
353 MemOperand operand = i.MemoryOperand(&mode, &first_index);
354 zeroExtIndex = first_index;
355 CHECK(rm_instr != NULL);
356 (masm->*rm_instr)(i.OutputRegister(), operand);
357 } else if (HasRegisterInput(instr, 1)) {
358 (masm->*rrr_instr)(i.OutputRegister(), i.InputRegister(0),
359 i.InputRegister(1));
360 } else if (HasImmediateInput(instr, 1)) {
361 CHECK(i.OutputRegister().is(i.InputRegister(0)));
362 (masm->*ri_instr)(i.OutputRegister(), i.InputImmediate(1));
363 } else if (HasStackSlotInput(instr, 1)) {
364 CHECK(i.OutputRegister().is(i.InputRegister(0)));
365 (masm->*rm_instr)(i.OutputRegister(), i.InputStackSlot32(1));
366 } else {
367 UNREACHABLE();
368 }
369 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
370 }
371
372 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
373 Instruction* instr, RRRTypeInstr rrr_instr,
374 RMTypeInstr rm_instr, RRITypeInstr rri_instr) {
375 AddressingMode mode = AddressingModeField::decode(instr->opcode());
376 int zeroExtIndex = 2;
377 if (mode != kMode_None) {
378 CHECK(i.OutputRegister().is(i.InputRegister(0)));
379 size_t first_index = 1;
380 MemOperand operand = i.MemoryOperand(&mode, &first_index);
381 zeroExtIndex = first_index;
382 CHECK(rm_instr != NULL);
383 (masm->*rm_instr)(i.OutputRegister(), operand);
384 } else if (HasRegisterInput(instr, 1)) {
385 (masm->*rrr_instr)(i.OutputRegister(), i.InputRegister(0),
386 i.InputRegister(1));
387 } else if (HasImmediateInput(instr, 1)) {
388 (masm->*rri_instr)(i.OutputRegister(), i.InputRegister(0),
389 i.InputImmediate(1));
390 } else if (HasStackSlotInput(instr, 1)) {
391 CHECK(i.OutputRegister().is(i.InputRegister(0)));
392 (masm->*rm_instr)(i.OutputRegister(), i.InputStackSlot32(1));
393 } else {
394 UNREACHABLE();
395 }
396 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
397 }
398
399 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
400 Instruction* instr, RRRTypeInstr rrr_instr,
401 RRMTypeInstr rrm_instr, RRITypeInstr rri_instr) {
402 AddressingMode mode = AddressingModeField::decode(instr->opcode());
403 int zeroExtIndex = 2;
404 if (mode != kMode_None) {
405 size_t first_index = 1;
406 MemOperand operand = i.MemoryOperand(&mode, &first_index);
407 zeroExtIndex = first_index;
408 CHECK(rrm_instr != NULL);
409 (masm->*rrm_instr)(i.OutputRegister(), i.InputRegister(0), operand);
410 } else if (HasRegisterInput(instr, 1)) {
411 (masm->*rrr_instr)(i.OutputRegister(), i.InputRegister(0),
412 i.InputRegister(1));
413 } else if (HasImmediateInput(instr, 1)) {
414 (masm->*rri_instr)(i.OutputRegister(), i.InputRegister(0),
415 i.InputImmediate(1));
416 } else if (HasStackSlotInput(instr, 1)) {
417 (masm->*rrm_instr)(i.OutputRegister(), i.InputRegister(0),
418 i.InputStackSlot32(1));
419 } else {
420 UNREACHABLE();
421 }
422 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
423 }
424
425 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
426 Instruction* instr, RRRTypeInstr rrr_instr,
427 RRITypeInstr rri_instr) {
428 AddressingMode mode = AddressingModeField::decode(instr->opcode());
429 CHECK(mode == kMode_None);
430 int zeroExtIndex = 2;
431 if (HasRegisterInput(instr, 1)) {
432 (masm->*rrr_instr)(i.OutputRegister(), i.InputRegister(0),
433 i.InputRegister(1));
434 } else if (HasImmediateInput(instr, 1)) {
435 (masm->*rri_instr)(i.OutputRegister(), i.InputRegister(0),
436 i.InputImmediate(1));
437 } else {
438 UNREACHABLE();
439 }
440 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
441 }
442
443 void AssembleBinOp(S390OperandConverter& i, MacroAssembler* masm,
444 Instruction* instr, RRTypeInstr rr_instr,
445 RITypeInstr ri_instr) {
446 AddressingMode mode = AddressingModeField::decode(instr->opcode());
447 CHECK(mode == kMode_None);
448 CHECK(i.OutputRegister().is(i.InputRegister(0)));
449 int zeroExtIndex = 2;
450 if (HasRegisterInput(instr, 1)) {
451 (masm->*rr_instr)(i.OutputRegister(), i.InputRegister(1));
452 } else if (HasImmediateInput(instr, 1)) {
453 (masm->*ri_instr)(i.OutputRegister(), i.InputImmediate(1));
454 } else {
455 UNREACHABLE();
456 }
457 CHECK_AND_ZERO_EXT_OUTPUT(zeroExtIndex);
458 }
459
460 #define ASSEMBLE_BIN_OP(instr1, instr2, instr3) \
461 AssembleBinOp(i, masm(), instr, &MacroAssembler::instr1, \
462 &MacroAssembler::instr2, &MacroAssembler::instr3)
463
464 #undef CHECK_AND_ZERO_EXT_OUTPUT
465
305 } // namespace 466 } // namespace
306 467
468 #define CHECK_AND_ZERO_EXT_OUTPUT(num) \
469 { \
470 CHECK(HasImmediateInput(instr, (num))); \
471 int doZeroExt = i.InputInt32(num); \
472 if (doZeroExt) __ LoadlW(i.OutputRegister(), i.OutputRegister()); \
473 }
474
307 #define ASSEMBLE_FLOAT_UNOP(asm_instr) \ 475 #define ASSEMBLE_FLOAT_UNOP(asm_instr) \
308 do { \ 476 do { \
309 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); \ 477 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); \
310 } while (0) 478 } while (0)
311 479
312 #define ASSEMBLE_FLOAT_BINOP(asm_instr) \ 480 #define ASSEMBLE_FLOAT_BINOP(asm_instr) \
313 do { \ 481 do { \
314 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0), \ 482 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0), \
315 i.InputDoubleRegister(1)); \ 483 i.InputDoubleRegister(1)); \
316 } while (0) 484 } while (0)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 520
353 // Divide instruction dr will implicity use register pair 521 // Divide instruction dr will implicity use register pair
354 // r0 & r1 below. 522 // r0 & r1 below.
355 // R0:R1 = R1 / divisor - R0 remainder 523 // R0:R1 = R1 / divisor - R0 remainder
356 // Copy remainder to output reg 524 // Copy remainder to output reg
357 #define ASSEMBLE_MODULO(div_instr, shift_instr) \ 525 #define ASSEMBLE_MODULO(div_instr, shift_instr) \
358 do { \ 526 do { \
359 __ LoadRR(r0, i.InputRegister(0)); \ 527 __ LoadRR(r0, i.InputRegister(0)); \
360 __ shift_instr(r0, Operand(32)); \ 528 __ shift_instr(r0, Operand(32)); \
361 __ div_instr(r0, i.InputRegister(1)); \ 529 __ div_instr(r0, i.InputRegister(1)); \
362 __ ltr(i.OutputRegister(), r0); \ 530 __ LoadlW(i.OutputRegister(), r0); \
363 } while (0) 531 } while (0)
364 532
365 #define ASSEMBLE_FLOAT_MODULO() \ 533 #define ASSEMBLE_FLOAT_MODULO() \
366 do { \ 534 do { \
367 FrameScope scope(masm(), StackFrame::MANUAL); \ 535 FrameScope scope(masm(), StackFrame::MANUAL); \
368 __ PrepareCallCFunction(0, 2, kScratchReg); \ 536 __ PrepareCallCFunction(0, 2, kScratchReg); \
369 __ MovToFloatParameters(i.InputDoubleRegister(0), \ 537 __ MovToFloatParameters(i.InputDoubleRegister(0), \
370 i.InputDoubleRegister(1)); \ 538 i.InputDoubleRegister(1)); \
371 __ CallCFunction(ExternalReference::mod_two_doubles_operation(isolate()), \ 539 __ CallCFunction(ExternalReference::mod_two_doubles_operation(isolate()), \
372 0, 2); \ 540 0, 2); \
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 break; 1219 break;
1052 } 1220 }
1053 case kArchStackSlot: { 1221 case kArchStackSlot: {
1054 FrameOffset offset = 1222 FrameOffset offset =
1055 frame_access_state()->GetFrameOffset(i.InputInt32(0)); 1223 frame_access_state()->GetFrameOffset(i.InputInt32(0));
1056 __ AddP(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp, 1224 __ AddP(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp,
1057 Operand(offset.offset())); 1225 Operand(offset.offset()));
1058 break; 1226 break;
1059 } 1227 }
1060 case kS390_And32: 1228 case kS390_And32:
1061 ASSEMBLE_BINOP(And); 1229 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1230 ASSEMBLE_BIN_OP(nrk, And, nilf);
1231 } else {
1232 ASSEMBLE_BIN_OP(nr, And, nilf);
1233 }
1062 break; 1234 break;
1063 case kS390_And64: 1235 case kS390_And64:
1064 ASSEMBLE_BINOP(AndP); 1236 ASSEMBLE_BINOP(AndP);
1065 break; 1237 break;
1066 case kS390_Or32: 1238 case kS390_Or32:
1067 ASSEMBLE_BINOP(Or); 1239 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1240 ASSEMBLE_BIN_OP(ork, Or, oilf);
1241 } else {
1242 ASSEMBLE_BIN_OP(or_z, Or, oilf);
1243 }
1244 break;
1068 case kS390_Or64: 1245 case kS390_Or64:
1069 ASSEMBLE_BINOP(OrP); 1246 ASSEMBLE_BINOP(OrP);
1070 break; 1247 break;
1071 case kS390_Xor32: 1248 case kS390_Xor32:
1072 ASSEMBLE_BINOP(Xor); 1249 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1250 ASSEMBLE_BIN_OP(xrk, Xor, xilf);
1251 } else {
1252 ASSEMBLE_BIN_OP(xr, Xor, xilf);
1253 }
1073 break; 1254 break;
1074 case kS390_Xor64: 1255 case kS390_Xor64:
1075 ASSEMBLE_BINOP(XorP); 1256 ASSEMBLE_BINOP(XorP);
1076 break; 1257 break;
1077 case kS390_ShiftLeft32: 1258 case kS390_ShiftLeft32:
1078 if (HasRegisterInput(instr, 1)) { 1259 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1079 if (i.OutputRegister().is(i.InputRegister(1)) && 1260 AssembleBinOp(i, masm(), instr, &MacroAssembler::sllk,
1080 !CpuFeatures::IsSupported(DISTINCT_OPS)) { 1261 &MacroAssembler::sllk);
1081 __ LoadRR(kScratchReg, i.InputRegister(1));
1082 __ ShiftLeft(i.OutputRegister(), i.InputRegister(0), kScratchReg);
1083 } else {
1084 ASSEMBLE_BINOP(ShiftLeft);
1085 }
1086 } else { 1262 } else {
1087 ASSEMBLE_BINOP(ShiftLeft); 1263 AssembleBinOp(i, masm(), instr, &MacroAssembler::sll,
1264 &MacroAssembler::sll);
1088 } 1265 }
1089 __ LoadlW(i.OutputRegister(0), i.OutputRegister(0));
1090 break; 1266 break;
1091 #if V8_TARGET_ARCH_S390X 1267 #if V8_TARGET_ARCH_S390X
1092 case kS390_ShiftLeft64: 1268 case kS390_ShiftLeft64:
1093 ASSEMBLE_BINOP(sllg); 1269 ASSEMBLE_BINOP(sllg);
1094 break; 1270 break;
1095 #endif 1271 #endif
1096 case kS390_ShiftRight32: 1272 case kS390_ShiftRight32:
1097 if (HasRegisterInput(instr, 1)) { 1273 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1098 if (i.OutputRegister().is(i.InputRegister(1)) && 1274 AssembleBinOp(i, masm(), instr, &MacroAssembler::srlk,
1099 !CpuFeatures::IsSupported(DISTINCT_OPS)) { 1275 &MacroAssembler::srlk);
1100 __ LoadRR(kScratchReg, i.InputRegister(1));
1101 __ ShiftRight(i.OutputRegister(), i.InputRegister(0), kScratchReg);
1102 } else {
1103 ASSEMBLE_BINOP(ShiftRight);
1104 }
1105 } else { 1276 } else {
1106 ASSEMBLE_BINOP(ShiftRight); 1277 AssembleBinOp(i, masm(), instr, &MacroAssembler::srl,
1278 &MacroAssembler::srl);
1107 } 1279 }
1108 __ LoadlW(i.OutputRegister(0), i.OutputRegister(0));
1109 break; 1280 break;
1110 #if V8_TARGET_ARCH_S390X 1281 #if V8_TARGET_ARCH_S390X
1111 case kS390_ShiftRight64: 1282 case kS390_ShiftRight64:
1112 ASSEMBLE_BINOP(srlg); 1283 ASSEMBLE_BINOP(srlg);
1113 break; 1284 break;
1114 #endif 1285 #endif
1115 case kS390_ShiftRightArith32: 1286 case kS390_ShiftRightArith32:
1116 if (HasRegisterInput(instr, 1)) { 1287 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1117 if (i.OutputRegister().is(i.InputRegister(1)) && 1288 AssembleBinOp(i, masm(), instr, &MacroAssembler::srak,
1118 !CpuFeatures::IsSupported(DISTINCT_OPS)) { 1289 &MacroAssembler::srak);
1119 __ LoadRR(kScratchReg, i.InputRegister(1));
1120 __ ShiftRightArith(i.OutputRegister(), i.InputRegister(0),
1121 kScratchReg);
1122 } else {
1123 ASSEMBLE_BINOP(ShiftRightArith);
1124 }
1125 } else { 1290 } else {
1126 ASSEMBLE_BINOP(ShiftRightArith); 1291 AssembleBinOp(i, masm(), instr, &MacroAssembler::sra,
1292 &MacroAssembler::sra);
1127 } 1293 }
1128 __ LoadlW(i.OutputRegister(), i.OutputRegister());
1129 break; 1294 break;
1130 #if V8_TARGET_ARCH_S390X 1295 #if V8_TARGET_ARCH_S390X
1131 case kS390_ShiftRightArith64: 1296 case kS390_ShiftRightArith64:
1132 ASSEMBLE_BINOP(srag); 1297 ASSEMBLE_BINOP(srag);
1133 break; 1298 break;
1134 #endif 1299 #endif
1135 #if !V8_TARGET_ARCH_S390X 1300 #if !V8_TARGET_ARCH_S390X
1136 case kS390_AddPair: 1301 case kS390_AddPair:
1137 // i.InputRegister(0) ... left low word. 1302 // i.InputRegister(0) ... left low word.
1138 // i.InputRegister(1) ... left high word. 1303 // i.InputRegister(1) ... left high word.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 i.InputRegister(0), i.InputRegister(1), 1365 i.InputRegister(0), i.InputRegister(1),
1201 i.InputInt32(2)); 1366 i.InputInt32(2));
1202 } else { 1367 } else {
1203 __ ShiftRightArithPair(i.OutputRegister(0), second_output, 1368 __ ShiftRightArithPair(i.OutputRegister(0), second_output,
1204 i.InputRegister(0), i.InputRegister(1), 1369 i.InputRegister(0), i.InputRegister(1),
1205 kScratchReg, i.InputRegister(2)); 1370 kScratchReg, i.InputRegister(2));
1206 } 1371 }
1207 break; 1372 break;
1208 } 1373 }
1209 #endif 1374 #endif
1210 case kS390_RotRight32: 1375 case kS390_RotRight32: {
1211 if (HasRegisterInput(instr, 1)) { 1376 if (HasRegisterInput(instr, 1)) {
1212 __ LoadComplementRR(kScratchReg, i.InputRegister(1)); 1377 __ LoadComplementRR(kScratchReg, i.InputRegister(1));
1213 __ rll(i.OutputRegister(), i.InputRegister(0), kScratchReg); 1378 __ rll(i.OutputRegister(), i.InputRegister(0), kScratchReg);
1214 } else { 1379 } else {
1215 __ rll(i.OutputRegister(), i.InputRegister(0), 1380 __ rll(i.OutputRegister(), i.InputRegister(0),
1216 Operand(32 - i.InputInt32(1))); 1381 Operand(32 - i.InputInt32(1)));
1217 } 1382 }
1383 CHECK_AND_ZERO_EXT_OUTPUT(2);
1218 break; 1384 break;
1385 }
1219 #if V8_TARGET_ARCH_S390X 1386 #if V8_TARGET_ARCH_S390X
1220 case kS390_RotRight64: 1387 case kS390_RotRight64:
1221 if (HasRegisterInput(instr, 1)) { 1388 if (HasRegisterInput(instr, 1)) {
1222 __ LoadComplementRR(kScratchReg, i.InputRegister(1)); 1389 __ LoadComplementRR(kScratchReg, i.InputRegister(1));
1223 __ rllg(i.OutputRegister(), i.InputRegister(0), kScratchReg); 1390 __ rllg(i.OutputRegister(), i.InputRegister(0), kScratchReg);
1224 } else { 1391 } else {
1225 __ rllg(i.OutputRegister(), i.InputRegister(0), 1392 __ rllg(i.OutputRegister(), i.InputRegister(0),
1226 Operand(64 - i.InputInt32(1))); 1393 Operand(64 - i.InputInt32(1)));
1227 } 1394 }
1228 break; 1395 break;
1229 #endif
1230 case kS390_Not32:
1231 __ Not32(i.OutputRegister(), i.InputRegister(0));
1232 break;
1233 case kS390_Not64:
1234 __ Not64(i.OutputRegister(), i.InputRegister(0));
1235 break;
1236 #if V8_TARGET_ARCH_S390X
1237 case kS390_RotLeftAndClear64: 1396 case kS390_RotLeftAndClear64:
1238 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) { 1397 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) {
1239 int shiftAmount = i.InputInt32(1); 1398 int shiftAmount = i.InputInt32(1);
1240 int endBit = 63 - shiftAmount; 1399 int endBit = 63 - shiftAmount;
1241 int startBit = 63 - i.InputInt32(2); 1400 int startBit = 63 - i.InputInt32(2);
1242 __ risbg(i.OutputRegister(), i.InputRegister(0), Operand(startBit), 1401 __ risbg(i.OutputRegister(), i.InputRegister(0), Operand(startBit),
1243 Operand(endBit), Operand(shiftAmount), true); 1402 Operand(endBit), Operand(shiftAmount), true);
1244 } else { 1403 } else {
1245 int shiftAmount = i.InputInt32(1); 1404 int shiftAmount = i.InputInt32(1);
1246 int clearBit = 63 - i.InputInt32(2); 1405 int clearBit = 63 - i.InputInt32(2);
(...skipping 28 matching lines...) Expand all
1275 Operand(endBit), Operand(shiftAmount), true); 1434 Operand(endBit), Operand(shiftAmount), true);
1276 } else { 1435 } else {
1277 int shiftAmount = i.InputInt32(1); 1436 int shiftAmount = i.InputInt32(1);
1278 int clearBit = i.InputInt32(2); 1437 int clearBit = i.InputInt32(2);
1279 __ rllg(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); 1438 __ rllg(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount));
1280 __ srlg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); 1439 __ srlg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit));
1281 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); 1440 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit));
1282 } 1441 }
1283 break; 1442 break;
1284 #endif 1443 #endif
1285 case kS390_Add32: 1444 case kS390_Add32: {
1286 ASSEMBLE_BINOP(Add32); 1445 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1287 __ LoadW(i.OutputRegister(), i.OutputRegister()); 1446 ASSEMBLE_BIN_OP(ark, Add32, Add32_RRI);
1447 } else {
1448 ASSEMBLE_BIN_OP(ar, Add32, Add32_RI);
1449 }
1288 break; 1450 break;
1451 }
1289 case kS390_Add64: 1452 case kS390_Add64:
1290 ASSEMBLE_BINOP(AddP); 1453 ASSEMBLE_BINOP(AddP);
1291 break; 1454 break;
1292 case kS390_AddFloat: 1455 case kS390_AddFloat:
1293 // Ensure we don't clobber right/InputReg(1) 1456 // Ensure we don't clobber right/InputReg(1)
1294 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) { 1457 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) {
1295 ASSEMBLE_FLOAT_UNOP(aebr); 1458 ASSEMBLE_FLOAT_UNOP(aebr);
1296 } else { 1459 } else {
1297 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0))) 1460 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0)))
1298 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1461 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1299 __ aebr(i.OutputDoubleRegister(), i.InputDoubleRegister(1)); 1462 __ aebr(i.OutputDoubleRegister(), i.InputDoubleRegister(1));
1300 } 1463 }
1301 break; 1464 break;
1302 case kS390_AddDouble: 1465 case kS390_AddDouble:
1303 // Ensure we don't clobber right/InputReg(1) 1466 // Ensure we don't clobber right/InputReg(1)
1304 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) { 1467 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) {
1305 ASSEMBLE_FLOAT_UNOP(adbr); 1468 ASSEMBLE_FLOAT_UNOP(adbr);
1306 } else { 1469 } else {
1307 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0))) 1470 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0)))
1308 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1471 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1309 __ adbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1)); 1472 __ adbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1));
1310 } 1473 }
1311 break; 1474 break;
1312 case kS390_Sub32: 1475 case kS390_Sub32:
1313 ASSEMBLE_BINOP(Sub32); 1476 if (CpuFeatures::IsSupported(DISTINCT_OPS)) {
1314 __ LoadW(i.OutputRegister(), i.OutputRegister()); 1477 ASSEMBLE_BIN_OP(srk, Sub32, Sub32_RRI);
1478 } else {
1479 ASSEMBLE_BIN_OP(sr, Sub32, Sub32_RI);
1480 }
1315 break; 1481 break;
1316 case kS390_Sub64: 1482 case kS390_Sub64:
1317 ASSEMBLE_BINOP(SubP); 1483 ASSEMBLE_BINOP(SubP);
1318 break; 1484 break;
1319 case kS390_SubFloat: 1485 case kS390_SubFloat:
1320 // OutputDoubleReg() = i.InputDoubleRegister(0) - i.InputDoubleRegister(1) 1486 // OutputDoubleReg() = i.InputDoubleRegister(0) - i.InputDoubleRegister(1)
1321 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) { 1487 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) {
1322 __ ldr(kScratchDoubleReg, i.InputDoubleRegister(1)); 1488 __ ldr(kScratchDoubleReg, i.InputDoubleRegister(1));
1323 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1489 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1324 __ sebr(i.OutputDoubleRegister(), kScratchDoubleReg); 1490 __ sebr(i.OutputDoubleRegister(), kScratchDoubleReg);
(...skipping 11 matching lines...) Expand all
1336 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1502 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1337 __ sdbr(i.OutputDoubleRegister(), kScratchDoubleReg); 1503 __ sdbr(i.OutputDoubleRegister(), kScratchDoubleReg);
1338 } else { 1504 } else {
1339 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0))) { 1505 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0))) {
1340 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1506 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1341 } 1507 }
1342 __ sdbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1)); 1508 __ sdbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1));
1343 } 1509 }
1344 break; 1510 break;
1345 case kS390_Mul32: 1511 case kS390_Mul32:
1346 if (HasRegisterInput(instr, 1)) { 1512 ASSEMBLE_BIN_OP(Mul32, Mul32, Mul32);
1347 __ Mul32(i.InputRegister(0), i.InputRegister(1)); 1513 break;
1348 } else if (HasImmediateInput(instr, 1)) { 1514 case kS390_Mul32WithOverflow:
1349 __ Mul32(i.InputRegister(0), i.InputImmediate(1)); 1515 ASSEMBLE_BIN_OP(Mul32WithOverflowIfCCUnequal,
1350 } else if (HasStackSlotInput(instr, 1)) { 1516 Mul32WithOverflowIfCCUnequal,
1351 __ Mul32(i.InputRegister(0), i.InputStackSlot32(1)); 1517 Mul32WithOverflowIfCCUnequal);
1352 } else {
1353 UNIMPLEMENTED();
1354 }
1355 break; 1518 break;
1356 case kS390_Mul64: 1519 case kS390_Mul64:
1520 CHECK(i.OutputRegister().is(i.InputRegister(0)));
1357 if (HasRegisterInput(instr, 1)) { 1521 if (HasRegisterInput(instr, 1)) {
1358 __ Mul64(i.InputRegister(0), i.InputRegister(1)); 1522 __ Mul64(i.InputRegister(0), i.InputRegister(1));
1359 } else if (HasImmediateInput(instr, 1)) { 1523 } else if (HasImmediateInput(instr, 1)) {
1360 __ Mul64(i.InputRegister(0), i.InputImmediate(1)); 1524 __ Mul64(i.InputRegister(0), i.InputImmediate(1));
1361 } else if (HasStackSlotInput(instr, 1)) { 1525 } else if (HasStackSlotInput(instr, 1)) {
1362 __ Mul64(i.InputRegister(0), i.InputStackSlot(1)); 1526 __ Mul64(i.InputRegister(0), i.InputStackSlot(1));
1363 } else { 1527 } else {
1364 UNIMPLEMENTED(); 1528 UNIMPLEMENTED();
1365 } 1529 }
1366 break; 1530 break;
1367 case kS390_MulHigh32: 1531 case kS390_MulHigh32:
1368 __ LoadRR(r1, i.InputRegister(0)); 1532 ASSEMBLE_BIN_OP(MulHigh32, MulHigh32, MulHigh32);
1369 if (HasRegisterInput(instr, 1)) {
1370 __ mr_z(r0, i.InputRegister(1));
1371 } else if (HasStackSlotInput(instr, 1)) {
1372 __ mfy(r0, i.InputStackSlot32(1));
1373 } else {
1374 UNIMPLEMENTED();
1375 }
1376 __ LoadW(i.OutputRegister(), r0);
1377 break; 1533 break;
1378 case kS390_Mul32WithHigh32: 1534 case kS390_Mul32WithHigh32:
1379 __ LoadRR(r1, i.InputRegister(0)); 1535 __ LoadRR(r1, i.InputRegister(0));
1380 __ mr_z(r0, i.InputRegister(1)); 1536 __ mr_z(r0, i.InputRegister(1));
1381 __ LoadW(i.OutputRegister(0), r1); // low 1537 __ LoadW(i.OutputRegister(0), r1); // low
1382 __ LoadW(i.OutputRegister(1), r0); // high 1538 __ LoadW(i.OutputRegister(1), r0); // high
1383 break; 1539 break;
1384 case kS390_MulHighU32: 1540 case kS390_MulHighU32:
1385 __ LoadRR(r1, i.InputRegister(0)); 1541 __ LoadRR(r1, i.InputRegister(0));
1386 if (HasRegisterInput(instr, 1)) { 1542 if (HasRegisterInput(instr, 1)) {
(...skipping 25 matching lines...) Expand all
1412 __ mdbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1)); 1568 __ mdbr(i.OutputDoubleRegister(), i.InputDoubleRegister(1));
1413 } 1569 }
1414 break; 1570 break;
1415 #if V8_TARGET_ARCH_S390X 1571 #if V8_TARGET_ARCH_S390X
1416 case kS390_Div64: 1572 case kS390_Div64:
1417 __ LoadRR(r1, i.InputRegister(0)); 1573 __ LoadRR(r1, i.InputRegister(0));
1418 __ dsgr(r0, i.InputRegister(1)); // R1: Dividend 1574 __ dsgr(r0, i.InputRegister(1)); // R1: Dividend
1419 __ ltgr(i.OutputRegister(), r1); // Copy R1: Quotient to output 1575 __ ltgr(i.OutputRegister(), r1); // Copy R1: Quotient to output
1420 break; 1576 break;
1421 #endif 1577 #endif
1422 case kS390_Div32: 1578 case kS390_Div32: {
1423 __ LoadRR(r0, i.InputRegister(0)); 1579 AddressingMode mode = AddressingModeField::decode(instr->opcode());
1424 __ srda(r0, Operand(32)); 1580 __ lgfr(r1, i.InputRegister(0));
1425 __ dr(r0, i.InputRegister(1)); 1581 if (mode != kMode_None) {
1426 __ LoadAndTestP_ExtendSrc(i.OutputRegister(), 1582 size_t first_index = 1;
1427 r1); // Copy R1: Quotient to output 1583 MemOperand operand = i.MemoryOperand(&mode, &first_index);
1584 __ dsgf(r0, operand);
1585 } else if (HasRegisterInput(instr, 1)) {
1586 __ dsgfr(r0, i.InputRegister(1));
1587 } else if (HasStackSlotInput(instr, 1)) {
1588 __ dsgf(r0, i.InputStackSlot32(1));
1589 } else {
1590 UNREACHABLE();
1591 }
1592 __ LoadlW(i.OutputRegister(), r1);
1428 break; 1593 break;
1594 }
1429 #if V8_TARGET_ARCH_S390X 1595 #if V8_TARGET_ARCH_S390X
1430 case kS390_DivU64: 1596 case kS390_DivU64:
1431 __ LoadRR(r1, i.InputRegister(0)); 1597 __ LoadRR(r1, i.InputRegister(0));
1432 __ LoadImmP(r0, Operand::Zero()); 1598 __ LoadImmP(r0, Operand::Zero());
1433 __ dlgr(r0, i.InputRegister(1)); // R0:R1: Dividend 1599 __ dlgr(r0, i.InputRegister(1)); // R0:R1: Dividend
1434 __ ltgr(i.OutputRegister(), r1); // Copy R1: Quotient to output 1600 __ ltgr(i.OutputRegister(), r1); // Copy R1: Quotient to output
1435 break; 1601 break;
1436 #endif 1602 #endif
1437 case kS390_DivU32: 1603 case kS390_DivU32: {
1438 __ LoadRR(r0, i.InputRegister(0)); 1604 __ lr(r0, i.InputRegister(0));
1439 __ srdl(r0, Operand(32)); 1605 __ srdl(r0, Operand(32));
1440 __ dlr(r0, i.InputRegister(1)); // R0:R1: Dividend 1606 AddressingMode mode = AddressingModeField::decode(instr->opcode());
1441 __ LoadlW(i.OutputRegister(), r1); // Copy R1: Quotient to output 1607 if (mode != kMode_None) {
1442 __ LoadAndTestP_ExtendSrc(r1, r1); 1608 size_t first_index = 1;
1609 MemOperand operand = i.MemoryOperand(&mode, &first_index);
1610 __ dl(r0, operand);
1611 } else if (HasRegisterInput(instr, 1)) {
1612 __ dlr(r0, i.InputRegister(1));
1613 } else if (HasStackSlotInput(instr, 1)) {
1614 __ dl(r0, i.InputStackSlot32(1));
1615 } else {
1616 UNREACHABLE();
1617 }
1618 __ LoadlW(i.OutputRegister(), r1);
1443 break; 1619 break;
1444 1620 }
1445 case kS390_DivFloat: 1621 case kS390_DivFloat:
1446 // InputDoubleRegister(1)=InputDoubleRegister(0)/InputDoubleRegister(1) 1622 // InputDoubleRegister(1)=InputDoubleRegister(0)/InputDoubleRegister(1)
1447 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) { 1623 if (i.OutputDoubleRegister().is(i.InputDoubleRegister(1))) {
1448 __ ldr(kScratchDoubleReg, i.InputDoubleRegister(1)); 1624 __ ldr(kScratchDoubleReg, i.InputDoubleRegister(1));
1449 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1625 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1450 __ debr(i.OutputDoubleRegister(), kScratchDoubleReg); 1626 __ debr(i.OutputDoubleRegister(), kScratchDoubleReg);
1451 } else { 1627 } else {
1452 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0))) 1628 if (!i.OutputDoubleRegister().is(i.InputDoubleRegister(0)))
1453 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 1629 __ ldr(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
1454 __ debr(i.OutputDoubleRegister(), i.InputDoubleRegister(1)); 1630 __ debr(i.OutputDoubleRegister(), i.InputDoubleRegister(1));
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 ASSEMBLE_IEEE754_UNOP(log10); 1744 ASSEMBLE_IEEE754_UNOP(log10);
1569 break; 1745 break;
1570 case kIeee754Float64Pow: { 1746 case kIeee754Float64Pow: {
1571 MathPowStub stub(isolate(), MathPowStub::DOUBLE); 1747 MathPowStub stub(isolate(), MathPowStub::DOUBLE);
1572 __ CallStub(&stub); 1748 __ CallStub(&stub);
1573 __ Move(d1, d3); 1749 __ Move(d1, d3);
1574 break; 1750 break;
1575 } 1751 }
1576 case kS390_Neg32: 1752 case kS390_Neg32:
1577 __ lcr(i.OutputRegister(), i.InputRegister(0)); 1753 __ lcr(i.OutputRegister(), i.InputRegister(0));
1578 __ LoadW(i.OutputRegister(), i.OutputRegister()); 1754 CHECK_AND_ZERO_EXT_OUTPUT(1);
1579 break; 1755 break;
1580 case kS390_Neg64: 1756 case kS390_Neg64:
1581 __ lcgr(i.OutputRegister(), i.InputRegister(0)); 1757 __ lcgr(i.OutputRegister(), i.InputRegister(0));
1582 break; 1758 break;
1583 case kS390_MaxFloat: 1759 case kS390_MaxFloat:
1584 ASSEMBLE_FLOAT_MAX(); 1760 ASSEMBLE_FLOAT_MAX();
1585 break; 1761 break;
1586 case kS390_MaxDouble: 1762 case kS390_MaxDouble:
1587 ASSEMBLE_DOUBLE_MAX(); 1763 ASSEMBLE_DOUBLE_MAX();
1588 break; 1764 break;
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1724 DCHECK(op->representation() == MachineRepresentation::kFloat32); 1900 DCHECK(op->representation() == MachineRepresentation::kFloat32);
1725 __ StoreFloat32(i.InputDoubleRegister(0), 1901 __ StoreFloat32(i.InputDoubleRegister(0),
1726 MemOperand(sp, slot * kPointerSize)); 1902 MemOperand(sp, slot * kPointerSize));
1727 } 1903 }
1728 } else { 1904 } else {
1729 __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); 1905 __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize));
1730 } 1906 }
1731 break; 1907 break;
1732 } 1908 }
1733 case kS390_ExtendSignWord8: 1909 case kS390_ExtendSignWord8:
1734 #if V8_TARGET_ARCH_S390X
1735 __ lgbr(i.OutputRegister(), i.InputRegister(0));
1736 #else
1737 __ lbr(i.OutputRegister(), i.InputRegister(0)); 1910 __ lbr(i.OutputRegister(), i.InputRegister(0));
1738 #endif 1911 CHECK_AND_ZERO_EXT_OUTPUT(1);
1739 break; 1912 break;
1740 case kS390_ExtendSignWord16: 1913 case kS390_ExtendSignWord16:
1741 #if V8_TARGET_ARCH_S390X
1742 __ lghr(i.OutputRegister(), i.InputRegister(0));
1743 #else
1744 __ lhr(i.OutputRegister(), i.InputRegister(0)); 1914 __ lhr(i.OutputRegister(), i.InputRegister(0));
1745 #endif 1915 CHECK_AND_ZERO_EXT_OUTPUT(1);
1746 break; 1916 break;
1747 #if V8_TARGET_ARCH_S390X 1917 #if V8_TARGET_ARCH_S390X
1748 case kS390_ExtendSignWord32: 1918 case kS390_ExtendSignWord32:
1749 __ lgfr(i.OutputRegister(), i.InputRegister(0)); 1919 __ lgfr(i.OutputRegister(), i.InputRegister(0));
1750 break; 1920 break;
1751 case kS390_Uint32ToUint64: 1921 case kS390_Uint32ToUint64:
1752 // Zero extend 1922 // Zero extend
1753 __ llgfr(i.OutputRegister(), i.InputRegister(0)); 1923 __ llgfr(i.OutputRegister(), i.InputRegister(0));
1754 break; 1924 break;
1755 case kS390_Int64ToInt32: 1925 case kS390_Int64ToInt32:
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
2006 break; 2176 break;
2007 case kS390_StoreReverse64: 2177 case kS390_StoreReverse64:
2008 ASSEMBLE_STORE_INTEGER(strvg); 2178 ASSEMBLE_STORE_INTEGER(strvg);
2009 break; 2179 break;
2010 case kS390_StoreFloat32: 2180 case kS390_StoreFloat32:
2011 ASSEMBLE_STORE_FLOAT32(); 2181 ASSEMBLE_STORE_FLOAT32();
2012 break; 2182 break;
2013 case kS390_StoreDouble: 2183 case kS390_StoreDouble:
2014 ASSEMBLE_STORE_DOUBLE(); 2184 ASSEMBLE_STORE_DOUBLE();
2015 break; 2185 break;
2186 case kS390_Lay:
2187 __ lay(i.OutputRegister(), i.MemoryOperand());
2188 break;
2016 case kCheckedLoadInt8: 2189 case kCheckedLoadInt8:
2017 ASSEMBLE_CHECKED_LOAD_INTEGER(LoadlB); 2190 ASSEMBLE_CHECKED_LOAD_INTEGER(LoadlB);
2018 #if V8_TARGET_ARCH_S390X 2191 #if V8_TARGET_ARCH_S390X
2019 __ lgbr(i.OutputRegister(), i.OutputRegister()); 2192 __ lgbr(i.OutputRegister(), i.OutputRegister());
2020 #else 2193 #else
2021 __ lbr(i.OutputRegister(), i.OutputRegister()); 2194 __ lbr(i.OutputRegister(), i.OutputRegister());
2022 #endif 2195 #endif
2023 break; 2196 break;
2024 case kCheckedLoadUint8: 2197 case kCheckedLoadUint8:
2025 ASSEMBLE_CHECKED_LOAD_INTEGER(LoadlB); 2198 ASSEMBLE_CHECKED_LOAD_INTEGER(LoadlB);
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
2354 destination->IsRegister() ? g.ToRegister(destination) : kScratchReg; 2527 destination->IsRegister() ? g.ToRegister(destination) : kScratchReg;
2355 switch (src.type()) { 2528 switch (src.type()) {
2356 case Constant::kInt32: 2529 case Constant::kInt32:
2357 #if V8_TARGET_ARCH_S390X 2530 #if V8_TARGET_ARCH_S390X
2358 if (RelocInfo::IsWasmSizeReference(src.rmode())) { 2531 if (RelocInfo::IsWasmSizeReference(src.rmode())) {
2359 #else 2532 #else
2360 if (RelocInfo::IsWasmReference(src.rmode())) { 2533 if (RelocInfo::IsWasmReference(src.rmode())) {
2361 #endif 2534 #endif
2362 __ mov(dst, Operand(src.ToInt32(), src.rmode())); 2535 __ mov(dst, Operand(src.ToInt32(), src.rmode()));
2363 } else { 2536 } else {
2364 __ mov(dst, Operand(src.ToInt32())); 2537 __ Load(dst, Operand(src.ToInt32()));
2365 } 2538 }
2366 break; 2539 break;
2367 case Constant::kInt64: 2540 case Constant::kInt64:
2368 #if V8_TARGET_ARCH_S390X 2541 #if V8_TARGET_ARCH_S390X
2369 if (RelocInfo::IsWasmPtrReference(src.rmode())) { 2542 if (RelocInfo::IsWasmPtrReference(src.rmode())) {
2370 __ mov(dst, Operand(src.ToInt64(), src.rmode())); 2543 __ mov(dst, Operand(src.ToInt64(), src.rmode()));
2371 } else { 2544 } else {
2372 DCHECK(!RelocInfo::IsWasmSizeReference(src.rmode())); 2545 DCHECK(!RelocInfo::IsWasmSizeReference(src.rmode()));
2373 __ mov(dst, Operand(src.ToInt64())); 2546 __ Load(dst, Operand(src.ToInt64()));
2374 } 2547 }
2375 #else 2548 #else
2376 __ mov(dst, Operand(src.ToInt64())); 2549 __ mov(dst, Operand(src.ToInt64()));
2377 #endif // V8_TARGET_ARCH_S390X 2550 #endif // V8_TARGET_ARCH_S390X
2378 break; 2551 break;
2379 case Constant::kFloat32: 2552 case Constant::kFloat32:
2380 __ Move(dst, 2553 __ Move(dst,
2381 isolate()->factory()->NewNumber(src.ToFloat32(), TENURED)); 2554 isolate()->factory()->NewNumber(src.ToFloat32(), TENURED));
2382 break; 2555 break;
2383 case Constant::kFloat64: 2556 case Constant::kFloat64:
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
2552 padding_size -= 2; 2725 padding_size -= 2;
2553 } 2726 }
2554 } 2727 }
2555 } 2728 }
2556 2729
2557 #undef __ 2730 #undef __
2558 2731
2559 } // namespace compiler 2732 } // namespace compiler
2560 } // namespace internal 2733 } // namespace internal
2561 } // namespace v8 2734 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/s390/instruction-codes-s390.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698