Index: src/x64/macro-assembler-x64.cc |
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc |
index 0b992341f21b342a73217bafc1b31b312c398afc..e9aa7a2533a3f6f0e80c02122cefb79a3c2bb5c9 100644 |
--- a/src/x64/macro-assembler-x64.cc |
+++ b/src/x64/macro-assembler-x64.cc |
@@ -599,11 +599,6 @@ void MacroAssembler::SmiCompare(Register dst, Smi* src) { |
} |
-void MacroAssembler::SmiCompare(Register dst, const Operand& src) { |
- cmpq(dst, src); |
-} |
- |
- |
void MacroAssembler::SmiCompare(const Operand& dst, Register src) { |
cmpq(dst, src); |
} |
@@ -739,17 +734,7 @@ void MacroAssembler::SmiAdd(Register dst, |
Register src2, |
Label* on_not_smi_result) { |
ASSERT(!dst.is(src2)); |
- if (on_not_smi_result == NULL) { |
- // No overflow checking. Use only when it's known that |
- // overflowing is impossible. |
- if (dst.is(src1)) { |
- addq(dst, src2); |
- } else { |
- movq(dst, src1); |
- addq(dst, src2); |
- } |
- Assert(no_overflow, "Smi addition onverflow"); |
- } else if (dst.is(src1)) { |
+ if (dst.is(src1)) { |
addq(dst, src2); |
Label smi_result; |
j(no_overflow, &smi_result); |
@@ -796,36 +781,6 @@ void MacroAssembler::SmiSub(Register dst, |
} |
-void MacroAssembler::SmiSub(Register dst, |
- Register src1, |
- Operand const& src2, |
- Label* on_not_smi_result) { |
- ASSERT(!dst.is(src2)); |
- if (on_not_smi_result == NULL) { |
- // No overflow checking. Use only when it's known that |
- // overflowing is impossible (e.g., subtracting two positive smis). |
- if (dst.is(src1)) { |
- subq(dst, src2); |
- } else { |
- movq(dst, src1); |
- subq(dst, src2); |
- } |
- Assert(no_overflow, "Smi substraction onverflow"); |
- } else if (dst.is(src1)) { |
- subq(dst, src2); |
- Label smi_result; |
- j(no_overflow, &smi_result); |
- // Restore src1. |
- addq(src1, src2); |
- jmp(on_not_smi_result); |
- bind(&smi_result); |
- } else { |
- movq(dst, src1); |
- subq(dst, src2); |
- j(overflow, on_not_smi_result); |
- } |
-} |
- |
void MacroAssembler::SmiMul(Register dst, |
Register src1, |
Register src2, |
@@ -2549,16 +2504,11 @@ void MacroAssembler::AllocateTwoByteString(Register result, |
Label* gc_required) { |
// Calculate the number of bytes needed for the characters in the string while |
// observing object alignment. |
- const int kHeaderAlignment = SeqTwoByteString::kHeaderSize & |
- kObjectAlignmentMask; |
+ ASSERT((SeqTwoByteString::kHeaderSize & kObjectAlignmentMask) == 0); |
ASSERT(kShortSize == 2); |
// scratch1 = length * 2 + kObjectAlignmentMask. |
- lea(scratch1, Operand(length, length, times_1, kObjectAlignmentMask + |
- kHeaderAlignment)); |
+ lea(scratch1, Operand(length, length, times_1, kObjectAlignmentMask)); |
and_(scratch1, Immediate(~kObjectAlignmentMask)); |
- if (kHeaderAlignment > 0) { |
- subq(scratch1, Immediate(kHeaderAlignment)); |
- } |
// Allocate two byte string in new space. |
AllocateInNewSpace(SeqTwoByteString::kHeaderSize, |
@@ -2573,8 +2523,7 @@ void MacroAssembler::AllocateTwoByteString(Register result, |
// Set the map, length and hash field. |
LoadRoot(kScratchRegister, Heap::kStringMapRootIndex); |
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister); |
- Integer32ToSmi(scratch1, length); |
- movq(FieldOperand(result, String::kLengthOffset), scratch1); |
+ movl(FieldOperand(result, String::kLengthOffset), length); |
movl(FieldOperand(result, String::kHashFieldOffset), |
Immediate(String::kEmptyHashField)); |
} |
@@ -2588,15 +2537,11 @@ void MacroAssembler::AllocateAsciiString(Register result, |
Label* gc_required) { |
// Calculate the number of bytes needed for the characters in the string while |
// observing object alignment. |
- const int kHeaderAlignment = SeqAsciiString::kHeaderSize & |
- kObjectAlignmentMask; |
+ ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0); |
movl(scratch1, length); |
ASSERT(kCharSize == 1); |
- addq(scratch1, Immediate(kObjectAlignmentMask + kHeaderAlignment)); |
+ addq(scratch1, Immediate(kObjectAlignmentMask)); |
and_(scratch1, Immediate(~kObjectAlignmentMask)); |
- if (kHeaderAlignment > 0) { |
- subq(scratch1, Immediate(kHeaderAlignment)); |
- } |
// Allocate ascii string in new space. |
AllocateInNewSpace(SeqAsciiString::kHeaderSize, |
@@ -2611,8 +2556,7 @@ void MacroAssembler::AllocateAsciiString(Register result, |
// Set the map, length and hash field. |
LoadRoot(kScratchRegister, Heap::kAsciiStringMapRootIndex); |
movq(FieldOperand(result, HeapObject::kMapOffset), kScratchRegister); |
- Integer32ToSmi(scratch1, length); |
- movq(FieldOperand(result, String::kLengthOffset), scratch1); |
+ movl(FieldOperand(result, String::kLengthOffset), length); |
movl(FieldOperand(result, String::kHashFieldOffset), |
Immediate(String::kEmptyHashField)); |
} |