| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
| 8 | 8 |
| 9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
| 10 #include "src/debug.h" | 10 #include "src/debug.h" |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 // Register state for CallICStub | 172 // Register state for CallICStub |
| 173 // ----------- S t a t e ------------- | 173 // ----------- S t a t e ------------- |
| 174 // -- edx : type feedback slot (smi) | 174 // -- edx : type feedback slot (smi) |
| 175 // -- edi : function | 175 // -- edi : function |
| 176 // ----------------------------------- | 176 // ----------------------------------- |
| 177 Generate_DebugBreakCallHelper(masm, edx.bit() | edi.bit(), | 177 Generate_DebugBreakCallHelper(masm, edx.bit() | edi.bit(), |
| 178 0, false); | 178 0, false); |
| 179 } | 179 } |
| 180 | 180 |
| 181 | 181 |
| 182 void DebugCodegen::GenerateLoadICDebugBreak(MacroAssembler* masm) { | |
| 183 // Register state for IC load call (from ic-ia32.cc). | |
| 184 Register receiver = LoadDescriptor::ReceiverRegister(); | |
| 185 Register name = LoadDescriptor::NameRegister(); | |
| 186 Register slot = LoadDescriptor::SlotRegister(); | |
| 187 RegList regs = receiver.bit() | name.bit() | slot.bit(); | |
| 188 Generate_DebugBreakCallHelper(masm, regs, 0, false); | |
| 189 } | |
| 190 | |
| 191 | |
| 192 void DebugCodegen::GenerateStoreICDebugBreak(MacroAssembler* masm) { | |
| 193 // Register state for IC store call (from ic-ia32.cc). | |
| 194 Register receiver = StoreDescriptor::ReceiverRegister(); | |
| 195 Register name = StoreDescriptor::NameRegister(); | |
| 196 Register value = StoreDescriptor::ValueRegister(); | |
| 197 RegList regs = receiver.bit() | name.bit() | value.bit(); | |
| 198 if (FLAG_vector_stores) { | |
| 199 regs |= VectorStoreICDescriptor::SlotRegister().bit(); | |
| 200 } | |
| 201 Generate_DebugBreakCallHelper(masm, regs, 0, false); | |
| 202 } | |
| 203 | |
| 204 | |
| 205 void DebugCodegen::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) { | |
| 206 // Register state for keyed IC load call (from ic-ia32.cc). | |
| 207 GenerateLoadICDebugBreak(masm); | |
| 208 } | |
| 209 | |
| 210 | |
| 211 void DebugCodegen::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) { | |
| 212 // Register state for keyed IC store call (from ic-ia32.cc). | |
| 213 GenerateStoreICDebugBreak(masm); | |
| 214 } | |
| 215 | |
| 216 | |
| 217 void DebugCodegen::GenerateCompareNilICDebugBreak(MacroAssembler* masm) { | |
| 218 // Register state for CompareNil IC | |
| 219 // ----------- S t a t e ------------- | |
| 220 // -- eax : value | |
| 221 // ----------------------------------- | |
| 222 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, false); | |
| 223 } | |
| 224 | |
| 225 | |
| 226 void DebugCodegen::GenerateReturnDebugBreak(MacroAssembler* masm) { | 182 void DebugCodegen::GenerateReturnDebugBreak(MacroAssembler* masm) { |
| 227 // Register state just before return from JS function (from codegen-ia32.cc). | 183 // Register state just before return from JS function (from codegen-ia32.cc). |
| 228 // ----------- S t a t e ------------- | 184 // ----------- S t a t e ------------- |
| 229 // -- eax: return value | 185 // -- eax: return value |
| 230 // ----------------------------------- | 186 // ----------------------------------- |
| 231 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, true); | 187 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, true); |
| 232 } | 188 } |
| 233 | 189 |
| 234 | 190 |
| 235 void DebugCodegen::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) { | 191 void DebugCodegen::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 Label check_codesize; | 232 Label check_codesize; |
| 277 __ bind(&check_codesize); | 233 __ bind(&check_codesize); |
| 278 __ RecordDebugBreakSlot(); | 234 __ RecordDebugBreakSlot(); |
| 279 __ Nop(Assembler::kDebugBreakSlotLength); | 235 __ Nop(Assembler::kDebugBreakSlotLength); |
| 280 DCHECK_EQ(Assembler::kDebugBreakSlotLength, | 236 DCHECK_EQ(Assembler::kDebugBreakSlotLength, |
| 281 masm->SizeOfCodeGeneratedSince(&check_codesize)); | 237 masm->SizeOfCodeGeneratedSince(&check_codesize)); |
| 282 } | 238 } |
| 283 | 239 |
| 284 | 240 |
| 285 void DebugCodegen::GenerateSlotDebugBreak(MacroAssembler* masm) { | 241 void DebugCodegen::GenerateSlotDebugBreak(MacroAssembler* masm) { |
| 286 // In the places where a debug break slot is inserted no registers can contain | |
| 287 // object pointers. | |
| 288 Generate_DebugBreakCallHelper(masm, 0, 0, true); | 242 Generate_DebugBreakCallHelper(masm, 0, 0, true); |
| 289 } | 243 } |
| 290 | 244 |
| 291 | 245 |
| 292 void DebugCodegen::GeneratePlainReturnLiveEdit(MacroAssembler* masm) { | 246 void DebugCodegen::GeneratePlainReturnLiveEdit(MacroAssembler* masm) { |
| 293 masm->ret(0); | 247 masm->ret(0); |
| 294 } | 248 } |
| 295 | 249 |
| 296 | 250 |
| 297 void DebugCodegen::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { | 251 void DebugCodegen::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 320 | 274 |
| 321 | 275 |
| 322 const bool LiveEdit::kFrameDropperSupported = true; | 276 const bool LiveEdit::kFrameDropperSupported = true; |
| 323 | 277 |
| 324 #undef __ | 278 #undef __ |
| 325 | 279 |
| 326 } // namespace internal | 280 } // namespace internal |
| 327 } // namespace v8 | 281 } // namespace v8 |
| 328 | 282 |
| 329 #endif // V8_TARGET_ARCH_IA32 | 283 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |