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

Unified Diff: src/x64/macro-assembler-x64.cc

Issue 926553004: [x64] Make r12 allocatable. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | src/x64/regexp-macro-assembler-x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/x64/macro-assembler-x64.cc
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
index a1172262b06cc82bd8034f5e909f7158c611abcd..2a16724bf85a969c2d0153cade4fdc8537b36fff 100644
--- a/src/x64/macro-assembler-x64.cc
+++ b/src/x64/macro-assembler-x64.cc
@@ -920,67 +920,13 @@ Register MacroAssembler::GetSmiConstant(Smi* source) {
xorl(kScratchRegister, kScratchRegister);
return kScratchRegister;
}
- if (value == 1) {
- return kSmiConstantRegister;
- }
LoadSmiConstant(kScratchRegister, source);
return kScratchRegister;
}
void MacroAssembler::LoadSmiConstant(Register dst, Smi* source) {
- if (emit_debug_code()) {
- Move(dst, Smi::FromInt(kSmiConstantRegisterValue),
- Assembler::RelocInfoNone());
- cmpp(dst, kSmiConstantRegister);
- Assert(equal, kUninitializedKSmiConstantRegister);
- }
- int value = source->value();
- if (value == 0) {
- xorl(dst, dst);
- return;
- }
- bool negative = value < 0;
- unsigned int uvalue = negative ? -value : value;
-
- switch (uvalue) {
- case 9:
- leap(dst,
- Operand(kSmiConstantRegister, kSmiConstantRegister, times_8, 0));
- break;
- case 8:
- xorl(dst, dst);
- leap(dst, Operand(dst, kSmiConstantRegister, times_8, 0));
- break;
- case 4:
- xorl(dst, dst);
- leap(dst, Operand(dst, kSmiConstantRegister, times_4, 0));
- break;
- case 5:
- leap(dst,
- Operand(kSmiConstantRegister, kSmiConstantRegister, times_4, 0));
- break;
- case 3:
- leap(dst,
- Operand(kSmiConstantRegister, kSmiConstantRegister, times_2, 0));
- break;
- case 2:
- leap(dst,
- Operand(kSmiConstantRegister, kSmiConstantRegister, times_1, 0));
- break;
- case 1:
- movp(dst, kSmiConstantRegister);
- break;
- case 0:
- UNREACHABLE();
- return;
- default:
- Move(dst, source, Assembler::RelocInfoNone());
- return;
- }
- if (negative) {
- negp(dst);
- }
+ Move(dst, source, Assembler::RelocInfoNone());
}
@@ -1273,14 +1219,6 @@ Condition MacroAssembler::CheckEitherSmi(Register first,
}
-Condition MacroAssembler::CheckIsMinSmi(Register src) {
- DCHECK(!src.is(kScratchRegister));
- // If we overflow by subtracting one, it's the minimal smi value.
- cmpp(src, kSmiConstantRegister);
- return overflow;
-}
-
-
Condition MacroAssembler::CheckInteger32ValidSmiValue(Register src) {
if (SmiValuesAre32Bits()) {
// A 32-bit integer value can always be converted to a smi.
@@ -1419,43 +1357,11 @@ void MacroAssembler::SmiAddConstant(Register dst, Register src, Smi* constant) {
return;
} else if (dst.is(src)) {
DCHECK(!dst.is(kScratchRegister));
- switch (constant->value()) {
- case 1:
- addp(dst, kSmiConstantRegister);
- return;
- case 2:
- leap(dst, Operand(src, kSmiConstantRegister, times_2, 0));
- return;
- case 4:
- leap(dst, Operand(src, kSmiConstantRegister, times_4, 0));
- return;
- case 8:
- leap(dst, Operand(src, kSmiConstantRegister, times_8, 0));
- return;
- default:
- Register constant_reg = GetSmiConstant(constant);
- addp(dst, constant_reg);
- return;
- }
+ Register constant_reg = GetSmiConstant(constant);
+ addp(dst, constant_reg);
} else {
- switch (constant->value()) {
- case 1:
- leap(dst, Operand(src, kSmiConstantRegister, times_1, 0));
- return;
- case 2:
- leap(dst, Operand(src, kSmiConstantRegister, times_2, 0));
- return;
- case 4:
- leap(dst, Operand(src, kSmiConstantRegister, times_4, 0));
- return;
- case 8:
- leap(dst, Operand(src, kSmiConstantRegister, times_8, 0));
- return;
- default:
- LoadSmiConstant(dst, constant);
- addp(dst, src);
- return;
- }
+ LoadSmiConstant(dst, constant);
+ addp(dst, src);
}
}
@@ -2770,15 +2676,13 @@ void MacroAssembler::Pop(const Operand& dst) {
popq(dst);
} else {
Register scratch = dst.AddressUsesRegister(kScratchRegister)
- ? kSmiConstantRegister : kScratchRegister;
+ ? kRootRegister : kScratchRegister;
movp(scratch, Operand(rsp, 0));
movp(dst, scratch);
leal(rsp, Operand(rsp, 4));
- if (scratch.is(kSmiConstantRegister)) {
- // Restore kSmiConstantRegister.
- movp(kSmiConstantRegister,
- reinterpret_cast<void*>(Smi::FromInt(kSmiConstantRegisterValue)),
- Assembler::RelocInfoNone());
+ if (scratch.is(kRootRegister)) {
+ // Restore kRootRegister.
+ InitializeRootRegister();
}
}
}
@@ -2921,11 +2825,11 @@ void MacroAssembler::Pushad() {
Push(r9);
// r10 is kScratchRegister.
Push(r11);
- // r12 is kSmiConstantRegister.
+ Push(r12);
// r13 is kRootRegister.
Push(r14);
Push(r15);
- STATIC_ASSERT(11 == kNumSafepointSavedRegisters);
+ STATIC_ASSERT(12 == kNumSafepointSavedRegisters);
// Use lea for symmetry with Popad.
int sp_delta =
(kNumSafepointRegisters - kNumSafepointSavedRegisters) * kPointerSize;
@@ -2940,6 +2844,7 @@ void MacroAssembler::Popad() {
leap(rsp, Operand(rsp, sp_delta));
Pop(r15);
Pop(r14);
+ Pop(r12);
Pop(r11);
Pop(r9);
Pop(r8);
@@ -2973,10 +2878,10 @@ MacroAssembler::kSafepointPushRegisterIndices[Register::kNumRegisters] = {
7,
-1,
8,
- -1,
- -1,
9,
- 10
+ -1,
+ 10,
+ 11
};
« no previous file with comments | « src/x64/macro-assembler-x64.h ('k') | src/x64/regexp-macro-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698