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

Side by Side Diff: src/ic/x64/handler-compiler-x64.cc

Issue 1696043002: [runtime] Unify and simplify how frames are marked (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix merge problems Created 4 years, 9 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #if V8_TARGET_ARCH_X64 5 #if V8_TARGET_ARCH_X64
6 6
7 #include "src/ic/handler-compiler.h" 7 #include "src/ic/handler-compiler.h"
8 8
9 #include "src/field-type.h" 9 #include "src/field-type.h"
10 #include "src/ic/call-optimization.h" 10 #include "src/ic/call-optimization.h"
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 231
232 void NamedStoreHandlerCompiler::GenerateStoreViaSetter( 232 void NamedStoreHandlerCompiler::GenerateStoreViaSetter(
233 MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder, 233 MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder,
234 int accessor_index, int expected_arguments, Register scratch) { 234 int accessor_index, int expected_arguments, Register scratch) {
235 // ----------- S t a t e ------------- 235 // ----------- S t a t e -------------
236 // -- rsp[0] : return address 236 // -- rsp[0] : return address
237 // ----------------------------------- 237 // -----------------------------------
238 { 238 {
239 FrameScope scope(masm, StackFrame::INTERNAL); 239 FrameScope scope(masm, StackFrame::INTERNAL);
240 240
241 // Save context register
242 __ pushq(rsi);
241 // Save value register, so we can restore it later. 243 // Save value register, so we can restore it later.
242 __ Push(value()); 244 __ Push(value());
243 245
244 if (accessor_index >= 0) { 246 if (accessor_index >= 0) {
245 DCHECK(!holder.is(scratch)); 247 DCHECK(!holder.is(scratch));
246 DCHECK(!receiver.is(scratch)); 248 DCHECK(!receiver.is(scratch));
247 DCHECK(!value().is(scratch)); 249 DCHECK(!value().is(scratch));
248 // Call the JavaScript setter with receiver and value on the stack. 250 // Call the JavaScript setter with receiver and value on the stack.
249 if (map->IsJSGlobalObjectMap()) { 251 if (map->IsJSGlobalObjectMap()) {
250 // Swap in the global receiver. 252 // Swap in the global receiver.
(...skipping 11 matching lines...) Expand all
262 } else { 264 } else {
263 // If we generate a global code snippet for deoptimization only, remember 265 // If we generate a global code snippet for deoptimization only, remember
264 // the place to continue after deoptimization. 266 // the place to continue after deoptimization.
265 masm->isolate()->heap()->SetSetterStubDeoptPCOffset(masm->pc_offset()); 267 masm->isolate()->heap()->SetSetterStubDeoptPCOffset(masm->pc_offset());
266 } 268 }
267 269
268 // We have to return the passed value, not the return value of the setter. 270 // We have to return the passed value, not the return value of the setter.
269 __ Pop(rax); 271 __ Pop(rax);
270 272
271 // Restore context register. 273 // Restore context register.
272 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); 274 __ popq(rsi);
273 } 275 }
274 __ ret(0); 276 __ ret(0);
275 } 277 }
276 278
277 279
278 void NamedLoadHandlerCompiler::GenerateLoadViaGetter( 280 void NamedLoadHandlerCompiler::GenerateLoadViaGetter(
279 MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder, 281 MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder,
280 int accessor_index, int expected_arguments, Register scratch) { 282 int accessor_index, int expected_arguments, Register scratch) {
281 // ----------- S t a t e ------------- 283 // ----------- S t a t e -------------
282 // -- rax : receiver 284 // -- rax : receiver
283 // -- rcx : name 285 // -- rcx : name
284 // -- rsp[0] : return address 286 // -- rsp[0] : return address
285 // ----------------------------------- 287 // -----------------------------------
286 { 288 {
287 FrameScope scope(masm, StackFrame::INTERNAL); 289 FrameScope scope(masm, StackFrame::INTERNAL);
288 290
291 // Save context register
292 __ pushq(rsi);
293
289 if (accessor_index >= 0) { 294 if (accessor_index >= 0) {
290 DCHECK(!holder.is(scratch)); 295 DCHECK(!holder.is(scratch));
291 DCHECK(!receiver.is(scratch)); 296 DCHECK(!receiver.is(scratch));
292 // Call the JavaScript getter with the receiver on the stack. 297 // Call the JavaScript getter with the receiver on the stack.
293 if (map->IsJSGlobalObjectMap()) { 298 if (map->IsJSGlobalObjectMap()) {
294 // Swap in the global receiver. 299 // Swap in the global receiver.
295 __ movp(scratch, 300 __ movp(scratch,
296 FieldOperand(receiver, JSGlobalObject::kGlobalProxyOffset)); 301 FieldOperand(receiver, JSGlobalObject::kGlobalProxyOffset));
297 receiver = scratch; 302 receiver = scratch;
298 } 303 }
299 __ Push(receiver); 304 __ Push(receiver);
300 ParameterCount actual(0); 305 ParameterCount actual(0);
301 ParameterCount expected(expected_arguments); 306 ParameterCount expected(expected_arguments);
302 __ LoadAccessor(rdi, holder, accessor_index, ACCESSOR_GETTER); 307 __ LoadAccessor(rdi, holder, accessor_index, ACCESSOR_GETTER);
303 __ InvokeFunction(rdi, no_reg, expected, actual, CALL_FUNCTION, 308 __ InvokeFunction(rdi, no_reg, expected, actual, CALL_FUNCTION,
304 CheckDebugStepCallWrapper()); 309 CheckDebugStepCallWrapper());
305 } else { 310 } else {
306 // If we generate a global code snippet for deoptimization only, remember 311 // If we generate a global code snippet for deoptimization only, remember
307 // the place to continue after deoptimization. 312 // the place to continue after deoptimization.
308 masm->isolate()->heap()->SetGetterStubDeoptPCOffset(masm->pc_offset()); 313 masm->isolate()->heap()->SetGetterStubDeoptPCOffset(masm->pc_offset());
309 } 314 }
310 315
311 // Restore context register. 316 // Restore context register.
312 __ movp(rsi, Operand(rbp, StandardFrameConstants::kContextOffset)); 317 __ popq(rsi);
313 } 318 }
314 __ ret(0); 319 __ ret(0);
315 } 320 }
316 321
317 322
318 static void StoreIC_PushArgs(MacroAssembler* masm) { 323 static void StoreIC_PushArgs(MacroAssembler* masm) {
319 Register receiver = StoreDescriptor::ReceiverRegister(); 324 Register receiver = StoreDescriptor::ReceiverRegister();
320 Register name = StoreDescriptor::NameRegister(); 325 Register name = StoreDescriptor::NameRegister();
321 Register value = StoreDescriptor::ValueRegister(); 326 Register value = StoreDescriptor::ValueRegister();
322 327
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 // Return the generated code. 815 // Return the generated code.
811 return GetCode(kind(), Code::NORMAL, name); 816 return GetCode(kind(), Code::NORMAL, name);
812 } 817 }
813 818
814 819
815 #undef __ 820 #undef __
816 } // namespace internal 821 } // namespace internal
817 } // namespace v8 822 } // namespace v8
818 823
819 #endif // V8_TARGET_ARCH_X64 824 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698