Index: src/mips64/lithium-mips64.cc |
diff --git a/src/mips/lithium-mips.cc b/src/mips64/lithium-mips64.cc |
similarity index 99% |
copy from src/mips/lithium-mips.cc |
copy to src/mips64/lithium-mips64.cc |
index f264f6248ec7f4fe13ce40ad326d94c9d5d9c0db..dd1c6ca2b156f3a12dbe834677eb53373540d774 100644 |
--- a/src/mips/lithium-mips.cc |
+++ b/src/mips64/lithium-mips64.cc |
@@ -6,8 +6,8 @@ |
#include "src/hydrogen-osr.h" |
#include "src/lithium-allocator-inl.h" |
-#include "src/mips/lithium-codegen-mips.h" |
-#include "src/mips/lithium-mips.h" |
+#include "src/mips64/lithium-codegen-mips64.h" |
+#include "src/mips64/lithium-mips64.h" |
namespace v8 { |
namespace internal { |
@@ -997,7 +997,7 @@ LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( |
new(zone()) LInstanceOfKnownGlobal( |
UseFixed(instr->context(), cp), |
UseFixed(instr->left(), a0), |
- FixedTemp(t0)); |
+ FixedTemp(a4)); |
return MarkAsCall(DefineFixed(result, v0), instr); |
} |
@@ -1277,7 +1277,7 @@ LInstruction* LChunkBuilder::DoDivByPowerOf2I(HDiv* instr) { |
if ((instr->CheckFlag(HValue::kBailoutOnMinusZero) && divisor < 0) || |
(instr->CheckFlag(HValue::kCanOverflow) && divisor == -1) || |
(!instr->CheckFlag(HInstruction::kAllUsesTruncatingToInt32) && |
- divisor != 1 && divisor != -1)) { |
+ divisor != 1 && divisor != -1)) { |
result = AssignEnvironment(result); |
} |
return result; |
@@ -1492,7 +1492,7 @@ LInstruction* LChunkBuilder::DoMul(HMul* instr) { |
return DefineAsRegister(mul); |
} else if (instr->representation().IsDouble()) { |
- if (kArchVariant == kMips32r2) { |
+ if (kArchVariant == kMips64r2) { |
if (instr->HasOneUse() && instr->uses().value()->IsAdd()) { |
HAdd* add = HAdd::cast(instr->uses().value()); |
if (instr == add->left()) { |
@@ -1565,7 +1565,7 @@ LInstruction* LChunkBuilder::DoAdd(HAdd* instr) { |
LInstruction* result = DefineAsRegister(add); |
return result; |
} else if (instr->representation().IsDouble()) { |
- if (kArchVariant == kMips32r2) { |
+ if (kArchVariant == kMips64r2) { |
if (instr->left()->IsMul()) |
return DoMultiplyAdd(HMul::cast(instr->left()), instr->right()); |
@@ -1789,7 +1789,7 @@ LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) { |
if (!FLAG_debug_code || !instr->skip_check()) { |
result = AssignEnvironment(result); |
} |
- return result; |
+return result; |
} |
@@ -1864,6 +1864,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
LOperand* value = UseRegister(val); |
LOperand* temp1 = TempRegister(); |
LOperand* temp2 = TempRegister(); |
+ |
LUnallocated* result_temp = TempRegister(); |
LNumberTagD* result = new(zone()) LNumberTagD(value, temp1, temp2); |
return AssignPointerMap(Define(result, result_temp)); |
@@ -1881,21 +1882,17 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
} else if (from.IsInteger32()) { |
info()->MarkAsDeferredCalling(); |
if (to.IsTagged()) { |
- if (!instr->CheckFlag(HValue::kCanOverflow)) { |
- LOperand* value = UseRegisterAtStart(val); |
- return DefineAsRegister(new(zone()) LSmiTag(value)); |
- } else if (val->CheckFlag(HInstruction::kUint32)) { |
+ if (val->CheckFlag(HInstruction::kUint32)) { |
LOperand* value = UseRegisterAtStart(val); |
LOperand* temp1 = TempRegister(); |
LOperand* temp2 = TempRegister(); |
LNumberTagU* result = new(zone()) LNumberTagU(value, temp1, temp2); |
return AssignPointerMap(DefineAsRegister(result)); |
} else { |
+ STATIC_ASSERT((kMinInt == Smi::kMinValue) && |
+ (kMaxInt == Smi::kMaxValue)); |
LOperand* value = UseRegisterAtStart(val); |
- LOperand* temp1 = TempRegister(); |
- LOperand* temp2 = TempRegister(); |
- LNumberTagI* result = new(zone()) LNumberTagI(value, temp1, temp2); |
- return AssignPointerMap(DefineAsRegister(result)); |
+ return DefineAsRegister(new(zone()) LSmiTag(value)); |
} |
} else if (to.IsSmi()) { |
LOperand* value = UseRegister(val); |
@@ -2116,7 +2113,8 @@ LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { |
if (instr->representation().IsDouble()) { |
obj = UseRegister(instr->elements()); |
} else { |
- ASSERT(instr->representation().IsSmiOrTagged()); |
+ ASSERT(instr->representation().IsSmiOrTagged() || |
+ instr->representation().IsInteger32()); |
obj = UseRegisterAtStart(instr->elements()); |
} |
result = DefineAsRegister(new(zone()) LLoadKeyed(obj, key)); |
@@ -2168,7 +2166,8 @@ LInstruction* LChunkBuilder::DoStoreKeyed(HStoreKeyed* instr) { |
key = UseRegisterOrConstantAtStart(instr->key()); |
val = UseRegister(instr->value()); |
} else { |
- ASSERT(instr->value()->representation().IsSmiOrTagged()); |
+ ASSERT(instr->value()->representation().IsSmiOrTagged() || |
+ instr->value()->representation().IsInteger32()); |
if (needs_write_barrier) { |
object = UseTempRegister(instr->elements()); |
val = UseTempRegister(instr->value()); |
@@ -2526,7 +2525,6 @@ LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { |
} |
- |
LInstruction* LChunkBuilder::DoStoreFrameContext(HStoreFrameContext* instr) { |
LOperand* context = UseRegisterAtStart(instr->context()); |
return new(zone()) LStoreFrameContext(context); |
@@ -2542,4 +2540,5 @@ LInstruction* LChunkBuilder::DoAllocateBlockContext( |
return MarkAsCall(DefineFixed(result, cp), instr); |
} |
+ |
} } // namespace v8::internal |