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 |