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

Side by Side Diff: src/crankshaft/mips/lithium-codegen-mips.cc

Issue 2122953002: [crankshaft] do not restore rsi in stub for deferred number conversions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixing register overlap on arm64 Created 4 years, 5 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 2012 the V8 project authors. All rights reserved.7 1 // Copyright 2012 the V8 project authors. All rights reserved.7
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4406 matching lines...) Expand 10 before | Expand all | Expand 10 after
4417 // Slow case: Call the runtime system to do the number allocation. 4417 // Slow case: Call the runtime system to do the number allocation.
4418 __ bind(&slow); 4418 __ bind(&slow);
4419 { 4419 {
4420 // TODO(3095996): Put a valid pointer value in the stack slot where the 4420 // TODO(3095996): Put a valid pointer value in the stack slot where the
4421 // result register is stored, as this register is in the pointer map, but 4421 // result register is stored, as this register is in the pointer map, but
4422 // contains an integer value. 4422 // contains an integer value.
4423 __ mov(dst, zero_reg); 4423 __ mov(dst, zero_reg);
4424 4424
4425 // Preserve the value of all registers. 4425 // Preserve the value of all registers.
4426 PushSafepointRegistersScope scope(this); 4426 PushSafepointRegistersScope scope(this);
4427 4427 // Reset the context register.
4428 // NumberTagI and NumberTagD use the context from the frame, rather than 4428 if (!dst.is(cp)) {
4429 // the environment's HContext or HInlinedContext value. 4429 __ mov(cp, zero_reg);
4430 // They only call Runtime::kAllocateHeapNumber. 4430 }
4431 // The corresponding HChange instructions are added in a phase that does
4432 // not have easy access to the local context.
4433 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4434 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber); 4431 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber);
4435 RecordSafepointWithRegisters( 4432 RecordSafepointWithRegisters(
4436 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); 4433 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt);
4437 __ StoreToSafepointRegisterSlot(v0, dst); 4434 __ StoreToSafepointRegisterSlot(v0, dst);
4438 } 4435 }
4439 4436
4440 // Done. Put the value in dbl_scratch into the value of the allocated heap 4437 // Done. Put the value in dbl_scratch into the value of the allocated heap
4441 // number. 4438 // number.
4442 __ bind(&done); 4439 __ bind(&done);
4443 __ sdc1(dbl_scratch, FieldMemOperand(dst, HeapNumber::kValueOffset)); 4440 __ sdc1(dbl_scratch, FieldMemOperand(dst, HeapNumber::kValueOffset));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4476 4473
4477 4474
4478 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { 4475 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) {
4479 // TODO(3095996): Get rid of this. For now, we need to make the 4476 // TODO(3095996): Get rid of this. For now, we need to make the
4480 // result register contain a valid pointer because it is already 4477 // result register contain a valid pointer because it is already
4481 // contained in the register pointer map. 4478 // contained in the register pointer map.
4482 Register reg = ToRegister(instr->result()); 4479 Register reg = ToRegister(instr->result());
4483 __ mov(reg, zero_reg); 4480 __ mov(reg, zero_reg);
4484 4481
4485 PushSafepointRegistersScope scope(this); 4482 PushSafepointRegistersScope scope(this);
4486 // NumberTagI and NumberTagD use the context from the frame, rather than 4483 // Reset the context register.
4487 // the environment's HContext or HInlinedContext value. 4484 if (!reg.is(cp)) {
4488 // They only call Runtime::kAllocateHeapNumber. 4485 __ mov(cp, zero_reg);
4489 // The corresponding HChange instructions are added in a phase that does 4486 }
4490 // not have easy access to the local context.
4491 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4492 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber); 4487 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber);
4493 RecordSafepointWithRegisters( 4488 RecordSafepointWithRegisters(
4494 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); 4489 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt);
4495 __ StoreToSafepointRegisterSlot(v0, reg); 4490 __ StoreToSafepointRegisterSlot(v0, reg);
4496 } 4491 }
4497 4492
4498 4493
4499 void LCodeGen::DoSmiTag(LSmiTag* instr) { 4494 void LCodeGen::DoSmiTag(LSmiTag* instr) {
4500 HChange* hchange = instr->hydrogen(); 4495 HChange* hchange = instr->hydrogen();
4501 Register input = ToRegister(instr->value()); 4496 Register input = ToRegister(instr->value());
(...skipping 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after
5532 __ lw(result, FieldMemOperand(scratch, 5527 __ lw(result, FieldMemOperand(scratch,
5533 FixedArray::kHeaderSize - kPointerSize)); 5528 FixedArray::kHeaderSize - kPointerSize));
5534 __ bind(deferred->exit()); 5529 __ bind(deferred->exit());
5535 __ bind(&done); 5530 __ bind(&done);
5536 } 5531 }
5537 5532
5538 #undef __ 5533 #undef __
5539 5534
5540 } // namespace internal 5535 } // namespace internal
5541 } // namespace v8 5536 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/ia32/lithium-codegen-ia32.cc ('k') | src/crankshaft/mips64/lithium-codegen-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698