| 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/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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 AddressingMode mode = kMode_None; \ | 459 AddressingMode mode = kMode_None; \ |
| 460 MemOperand operand = i.MemoryOperand(&mode, index); \ | 460 MemOperand operand = i.MemoryOperand(&mode, index); \ |
| 461 Register offset = operand.rb(); \ | 461 Register offset = operand.rb(); \ |
| 462 if (HasRegisterInput(instr, 2)) { \ | 462 if (HasRegisterInput(instr, 2)) { \ |
| 463 __ CmpLogical32(offset, i.InputRegister(2)); \ | 463 __ CmpLogical32(offset, i.InputRegister(2)); \ |
| 464 } else { \ | 464 } else { \ |
| 465 __ CmpLogical32(offset, i.InputImmediate(2)); \ | 465 __ CmpLogical32(offset, i.InputImmediate(2)); \ |
| 466 } \ | 466 } \ |
| 467 auto ool = new (zone()) OutOfLineLoadNAN##width(this, result); \ | 467 auto ool = new (zone()) OutOfLineLoadNAN##width(this, result); \ |
| 468 __ bge(ool->entry()); \ | 468 __ bge(ool->entry()); \ |
| 469 __ CleanUInt32(offset); \ |
| 469 __ asm_instr(result, operand); \ | 470 __ asm_instr(result, operand); \ |
| 470 __ bind(ool->exit()); \ | 471 __ bind(ool->exit()); \ |
| 471 } while (0) | 472 } while (0) |
| 472 | 473 |
| 473 #define ASSEMBLE_CHECKED_LOAD_INTEGER(asm_instr) \ | 474 #define ASSEMBLE_CHECKED_LOAD_INTEGER(asm_instr) \ |
| 474 do { \ | 475 do { \ |
| 475 Register result = i.OutputRegister(); \ | 476 Register result = i.OutputRegister(); \ |
| 476 size_t index = 0; \ | 477 size_t index = 0; \ |
| 477 AddressingMode mode = kMode_None; \ | 478 AddressingMode mode = kMode_None; \ |
| 478 MemOperand operand = i.MemoryOperand(&mode, index); \ | 479 MemOperand operand = i.MemoryOperand(&mode, index); \ |
| 479 Register offset = operand.rb(); \ | 480 Register offset = operand.rb(); \ |
| 480 if (HasRegisterInput(instr, 2)) { \ | 481 if (HasRegisterInput(instr, 2)) { \ |
| 481 __ CmpLogical32(offset, i.InputRegister(2)); \ | 482 __ CmpLogical32(offset, i.InputRegister(2)); \ |
| 482 } else { \ | 483 } else { \ |
| 483 __ CmpLogical32(offset, i.InputImmediate(2)); \ | 484 __ CmpLogical32(offset, i.InputImmediate(2)); \ |
| 484 } \ | 485 } \ |
| 485 auto ool = new (zone()) OutOfLineLoadZero(this, result); \ | 486 auto ool = new (zone()) OutOfLineLoadZero(this, result); \ |
| 486 __ bge(ool->entry()); \ | 487 __ bge(ool->entry()); \ |
| 488 __ CleanUInt32(offset); \ |
| 487 __ asm_instr(result, operand); \ | 489 __ asm_instr(result, operand); \ |
| 488 __ bind(ool->exit()); \ | 490 __ bind(ool->exit()); \ |
| 489 } while (0) | 491 } while (0) |
| 490 | 492 |
| 491 #define ASSEMBLE_CHECKED_STORE_FLOAT32() \ | 493 #define ASSEMBLE_CHECKED_STORE_FLOAT32() \ |
| 492 do { \ | 494 do { \ |
| 493 Label done; \ | 495 Label done; \ |
| 494 size_t index = 0; \ | 496 size_t index = 0; \ |
| 495 AddressingMode mode = kMode_None; \ | 497 AddressingMode mode = kMode_None; \ |
| 496 MemOperand operand = i.MemoryOperand(&mode, index); \ | 498 MemOperand operand = i.MemoryOperand(&mode, index); \ |
| 497 Register offset = operand.rb(); \ | 499 Register offset = operand.rb(); \ |
| 498 if (HasRegisterInput(instr, 2)) { \ | 500 if (HasRegisterInput(instr, 2)) { \ |
| 499 __ CmpLogical32(offset, i.InputRegister(2)); \ | 501 __ CmpLogical32(offset, i.InputRegister(2)); \ |
| 500 } else { \ | 502 } else { \ |
| 501 __ CmpLogical32(offset, i.InputImmediate(2)); \ | 503 __ CmpLogical32(offset, i.InputImmediate(2)); \ |
| 502 } \ | 504 } \ |
| 503 __ bge(&done); \ | 505 __ bge(&done); \ |
| 504 DoubleRegister value = i.InputDoubleRegister(3); \ | 506 DoubleRegister value = i.InputDoubleRegister(3); \ |
| 507 __ CleanUInt32(offset); \ |
| 505 __ StoreFloat32(value, operand); \ | 508 __ StoreFloat32(value, operand); \ |
| 506 __ bind(&done); \ | 509 __ bind(&done); \ |
| 507 } while (0) | 510 } while (0) |
| 508 | 511 |
| 509 #define ASSEMBLE_CHECKED_STORE_DOUBLE() \ | 512 #define ASSEMBLE_CHECKED_STORE_DOUBLE() \ |
| 510 do { \ | 513 do { \ |
| 511 Label done; \ | 514 Label done; \ |
| 512 size_t index = 0; \ | 515 size_t index = 0; \ |
| 513 AddressingMode mode = kMode_None; \ | 516 AddressingMode mode = kMode_None; \ |
| 514 MemOperand operand = i.MemoryOperand(&mode, index); \ | 517 MemOperand operand = i.MemoryOperand(&mode, index); \ |
| 515 DCHECK_EQ(kMode_MRR, mode); \ | 518 DCHECK_EQ(kMode_MRR, mode); \ |
| 516 Register offset = operand.rb(); \ | 519 Register offset = operand.rb(); \ |
| 517 if (HasRegisterInput(instr, 2)) { \ | 520 if (HasRegisterInput(instr, 2)) { \ |
| 518 __ CmpLogical32(offset, i.InputRegister(2)); \ | 521 __ CmpLogical32(offset, i.InputRegister(2)); \ |
| 519 } else { \ | 522 } else { \ |
| 520 __ CmpLogical32(offset, i.InputImmediate(2)); \ | 523 __ CmpLogical32(offset, i.InputImmediate(2)); \ |
| 521 } \ | 524 } \ |
| 522 __ bge(&done); \ | 525 __ bge(&done); \ |
| 523 DoubleRegister value = i.InputDoubleRegister(3); \ | 526 DoubleRegister value = i.InputDoubleRegister(3); \ |
| 527 __ CleanUInt32(offset); \ |
| 524 __ StoreDouble(value, operand); \ | 528 __ StoreDouble(value, operand); \ |
| 525 __ bind(&done); \ | 529 __ bind(&done); \ |
| 526 } while (0) | 530 } while (0) |
| 527 | 531 |
| 528 #define ASSEMBLE_CHECKED_STORE_INTEGER(asm_instr) \ | 532 #define ASSEMBLE_CHECKED_STORE_INTEGER(asm_instr) \ |
| 529 do { \ | 533 do { \ |
| 530 Label done; \ | 534 Label done; \ |
| 531 size_t index = 0; \ | 535 size_t index = 0; \ |
| 532 AddressingMode mode = kMode_None; \ | 536 AddressingMode mode = kMode_None; \ |
| 533 MemOperand operand = i.MemoryOperand(&mode, index); \ | 537 MemOperand operand = i.MemoryOperand(&mode, index); \ |
| 534 Register offset = operand.rb(); \ | 538 Register offset = operand.rb(); \ |
| 535 if (HasRegisterInput(instr, 2)) { \ | 539 if (HasRegisterInput(instr, 2)) { \ |
| 536 __ CmpLogical32(offset, i.InputRegister(2)); \ | 540 __ CmpLogical32(offset, i.InputRegister(2)); \ |
| 537 } else { \ | 541 } else { \ |
| 538 __ CmpLogical32(offset, i.InputImmediate(2)); \ | 542 __ CmpLogical32(offset, i.InputImmediate(2)); \ |
| 539 } \ | 543 } \ |
| 540 __ bge(&done); \ | 544 __ bge(&done); \ |
| 541 Register value = i.InputRegister(3); \ | 545 Register value = i.InputRegister(3); \ |
| 546 __ CleanUInt32(offset); \ |
| 542 __ asm_instr(value, operand); \ | 547 __ asm_instr(value, operand); \ |
| 543 __ bind(&done); \ | 548 __ bind(&done); \ |
| 544 } while (0) | 549 } while (0) |
| 545 | 550 |
| 546 void CodeGenerator::AssembleDeconstructFrame() { | 551 void CodeGenerator::AssembleDeconstructFrame() { |
| 547 __ LeaveFrame(StackFrame::MANUAL); | 552 __ LeaveFrame(StackFrame::MANUAL); |
| 548 } | 553 } |
| 549 | 554 |
| 550 void CodeGenerator::AssembleDeconstructActivationRecord(int stack_param_delta) { | 555 void CodeGenerator::AssembleDeconstructActivationRecord(int stack_param_delta) { |
| 551 int sp_slot_delta = TailCallFrameStackSlotDelta(stack_param_delta); | 556 int sp_slot_delta = TailCallFrameStackSlotDelta(stack_param_delta); |
| (...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2118 padding_size -= 2; | 2123 padding_size -= 2; |
| 2119 } | 2124 } |
| 2120 } | 2125 } |
| 2121 } | 2126 } |
| 2122 | 2127 |
| 2123 #undef __ | 2128 #undef __ |
| 2124 | 2129 |
| 2125 } // namespace compiler | 2130 } // namespace compiler |
| 2126 } // namespace internal | 2131 } // namespace internal |
| 2127 } // namespace v8 | 2132 } // namespace v8 |
| OLD | NEW |