| Index: src/ia32/lithium-ia32.cc
|
| diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc
|
| index 5343773daff5c6cf7b43ed5ca1ebfd5d26a007df..aca9bdf9f7ce8290c536a60c10424235b2e1adce 100644
|
| --- a/src/ia32/lithium-ia32.cc
|
| +++ b/src/ia32/lithium-ia32.cc
|
| @@ -286,7 +286,7 @@ void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) {
|
| stream->Add("if typeof ");
|
| value()->PrintTo(stream);
|
| stream->Add(" == \"%s\" then B%d else B%d",
|
| - *hydrogen()->type_literal()->ToCString(),
|
| + hydrogen()->type_literal()->ToCString().get(),
|
| true_block_id(), false_block_id());
|
| }
|
|
|
| @@ -302,7 +302,8 @@ void LStoreCodeEntry::PrintDataTo(StringStream* stream) {
|
| void LInnerAllocatedObject::PrintDataTo(StringStream* stream) {
|
| stream->Add(" = ");
|
| base_object()->PrintTo(stream);
|
| - stream->Add(" + %d", offset());
|
| + stream->Add(" + ");
|
| + offset()->PrintTo(stream);
|
| }
|
|
|
|
|
| @@ -340,13 +341,13 @@ void LCallKeyed::PrintDataTo(StringStream* stream) {
|
|
|
| void LCallNamed::PrintDataTo(StringStream* stream) {
|
| SmartArrayPointer<char> name_string = name()->ToCString();
|
| - stream->Add("%s #%d / ", *name_string, arity());
|
| + stream->Add("%s #%d / ", name_string.get(), arity());
|
| }
|
|
|
|
|
| void LCallGlobal::PrintDataTo(StringStream* stream) {
|
| SmartArrayPointer<char> name_string = name()->ToCString();
|
| - stream->Add("%s #%d / ", *name_string, arity());
|
| + stream->Add("%s #%d / ", name_string.get(), arity());
|
| }
|
|
|
|
|
| @@ -419,7 +420,7 @@ void LStoreNamedField::PrintDataTo(StringStream* stream) {
|
| void LStoreNamedGeneric::PrintDataTo(StringStream* stream) {
|
| object()->PrintTo(stream);
|
| stream->Add(".");
|
| - stream->Add(*String::cast(*name())->ToCString());
|
| + stream->Add(String::cast(*name())->ToCString().get());
|
| stream->Add(" <- ");
|
| value()->PrintTo(stream);
|
| }
|
| @@ -1201,11 +1202,11 @@ LInstruction* LChunkBuilder::DoStoreCodeEntry(
|
|
|
|
|
| LInstruction* LChunkBuilder::DoInnerAllocatedObject(
|
| - HInnerAllocatedObject* inner_object) {
|
| - LOperand* base_object = UseRegisterAtStart(inner_object->base_object());
|
| - LInnerAllocatedObject* result =
|
| - new(zone()) LInnerAllocatedObject(base_object);
|
| - return DefineAsRegister(result);
|
| + HInnerAllocatedObject* instr) {
|
| + LOperand* base_object = UseRegisterAtStart(instr->base_object());
|
| + LOperand* offset = UseRegisterOrConstantAtStart(instr->offset());
|
| + return DefineAsRegister(
|
| + new(zone()) LInnerAllocatedObject(base_object, offset));
|
| }
|
|
|
|
|
| @@ -1271,9 +1272,6 @@ LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
| case kMathRound: return DoMathRound(instr);
|
| case kMathAbs: return DoMathAbs(instr);
|
| case kMathLog: return DoMathLog(instr);
|
| - case kMathSin: return DoMathSin(instr);
|
| - case kMathCos: return DoMathCos(instr);
|
| - case kMathTan: return DoMathTan(instr);
|
| case kMathExp: return DoMathExp(instr);
|
| case kMathSqrt: return DoMathSqrt(instr);
|
| case kMathPowHalf: return DoMathPowHalf(instr);
|
| @@ -1316,27 +1314,6 @@ LInstruction* LChunkBuilder::DoMathLog(HUnaryMathOperation* instr) {
|
| }
|
|
|
|
|
| -LInstruction* LChunkBuilder::DoMathSin(HUnaryMathOperation* instr) {
|
| - LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| - LMathSin* result = new(zone()) LMathSin(input);
|
| - return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| -}
|
| -
|
| -
|
| -LInstruction* LChunkBuilder::DoMathCos(HUnaryMathOperation* instr) {
|
| - LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| - LMathCos* result = new(zone()) LMathCos(input);
|
| - return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| -}
|
| -
|
| -
|
| -LInstruction* LChunkBuilder::DoMathTan(HUnaryMathOperation* instr) {
|
| - LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| - LMathTan* result = new(zone()) LMathTan(input);
|
| - return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| -}
|
| -
|
| -
|
| LInstruction* LChunkBuilder::DoMathExp(HUnaryMathOperation* instr) {
|
| ASSERT(instr->representation().IsDouble());
|
| ASSERT(instr->value()->representation().IsDouble());
|
| @@ -1653,6 +1630,21 @@ LInstruction* LChunkBuilder::DoAdd(HAdd* instr) {
|
| return result;
|
| } else if (instr->representation().IsDouble()) {
|
| return DoArithmeticD(Token::ADD, instr);
|
| + } else if (instr->representation().IsExternal()) {
|
| + ASSERT(instr->left()->representation().IsExternal());
|
| + ASSERT(instr->right()->representation().IsInteger32());
|
| + ASSERT(!instr->CheckFlag(HValue::kCanOverflow));
|
| + bool use_lea = LAddI::UseLea(instr);
|
| + LOperand* left = UseRegisterAtStart(instr->left());
|
| + HValue* right_candidate = instr->right();
|
| + LOperand* right = use_lea
|
| + ? UseRegisterOrConstantAtStart(right_candidate)
|
| + : UseOrConstantAtStart(right_candidate);
|
| + LAddI* add = new(zone()) LAddI(left, right);
|
| + LInstruction* result = use_lea
|
| + ? DefineAsRegister(add)
|
| + : DefineSameAsFirst(add);
|
| + return result;
|
| } else {
|
| return DoArithmeticT(Token::ADD, instr);
|
| }
|
| @@ -2405,7 +2397,7 @@ LInstruction* LChunkBuilder::DoTransitionElementsKind(
|
| new_map_reg, temp_reg);
|
| return result;
|
| } else {
|
| - LOperand* context = UseRegister(instr->context());
|
| + LOperand* context = UseFixed(instr->context(), esi);
|
| LTransitionElementsKind* result =
|
| new(zone()) LTransitionElementsKind(object, context, NULL, NULL);
|
| return AssignPointerMap(result);
|
|
|