| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
| 8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
| 9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
| 10 #include "src/scopes.h" | 10 #include "src/scopes.h" |
| (...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1098 } else { | 1098 } else { |
| 1099 if (instr->InputAt(0)->IsRegister()) { | 1099 if (instr->InputAt(0)->IsRegister()) { |
| 1100 __ pushq(i.InputRegister(0)); | 1100 __ pushq(i.InputRegister(0)); |
| 1101 } else { | 1101 } else { |
| 1102 __ pushq(i.InputOperand(0)); | 1102 __ pushq(i.InputOperand(0)); |
| 1103 } | 1103 } |
| 1104 } | 1104 } |
| 1105 break; | 1105 break; |
| 1106 case kX64StoreWriteBarrier: { | 1106 case kX64StoreWriteBarrier: { |
| 1107 Register object = i.InputRegister(0); | 1107 Register object = i.InputRegister(0); |
| 1108 Register index = i.InputRegister(1); | |
| 1109 Register value = i.InputRegister(2); | 1108 Register value = i.InputRegister(2); |
| 1110 __ movq(Operand(object, index, times_1, 0), value); | |
| 1111 __ leaq(index, Operand(object, index, times_1, 0)); | |
| 1112 SaveFPRegsMode mode = | 1109 SaveFPRegsMode mode = |
| 1113 frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; | 1110 frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; |
| 1114 __ RecordWrite(object, index, value, mode); | 1111 if (HasImmediateInput(instr, 1)) { |
| 1112 int index = i.InputInt32(1); |
| 1113 Register scratch = i.TempRegister(1); |
| 1114 __ movq(Operand(object, index), value); |
| 1115 __ RecordWriteContextSlot(object, index, value, scratch, mode); |
| 1116 } else { |
| 1117 Register index = i.InputRegister(1); |
| 1118 __ movq(Operand(object, index, times_1, 0), value); |
| 1119 __ leaq(index, Operand(object, index, times_1, 0)); |
| 1120 __ RecordWrite(object, index, value, mode); |
| 1121 } |
| 1115 break; | 1122 break; |
| 1116 } | 1123 } |
| 1117 case kCheckedLoadInt8: | 1124 case kCheckedLoadInt8: |
| 1118 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxbl); | 1125 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxbl); |
| 1119 break; | 1126 break; |
| 1120 case kCheckedLoadUint8: | 1127 case kCheckedLoadUint8: |
| 1121 ASSEMBLE_CHECKED_LOAD_INTEGER(movzxbl); | 1128 ASSEMBLE_CHECKED_LOAD_INTEGER(movzxbl); |
| 1122 break; | 1129 break; |
| 1123 case kCheckedLoadInt16: | 1130 case kCheckedLoadInt16: |
| 1124 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxwl); | 1131 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxwl); |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1599 } | 1606 } |
| 1600 } | 1607 } |
| 1601 MarkLazyDeoptSite(); | 1608 MarkLazyDeoptSite(); |
| 1602 } | 1609 } |
| 1603 | 1610 |
| 1604 #undef __ | 1611 #undef __ |
| 1605 | 1612 |
| 1606 } // namespace internal | 1613 } // namespace internal |
| 1607 } // namespace compiler | 1614 } // namespace compiler |
| 1608 } // namespace v8 | 1615 } // namespace v8 |
| OLD | NEW |