| Index: src/ia32/lithium-ia32.cc
|
| ===================================================================
|
| --- src/ia32/lithium-ia32.cc (revision 6008)
|
| +++ src/ia32/lithium-ia32.cc (working copy)
|
| @@ -1355,22 +1355,28 @@
|
|
|
| LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
| MathFunctionId op = instr->op();
|
| - LOperand* input = UseRegisterAtStart(instr->value());
|
| - LInstruction* result = new LUnaryMathOperation(input);
|
| - switch (op) {
|
| - case kMathAbs:
|
| - return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| - case kMathFloor:
|
| - return AssignEnvironment(DefineAsRegister(result));
|
| - case kMathRound:
|
| - return AssignEnvironment(DefineAsRegister(result));
|
| - case kMathSqrt:
|
| - return DefineSameAsFirst(result);
|
| - case kMathPowHalf:
|
| - return AssignEnvironment(DefineSameAsFirst(result));
|
| - default:
|
| - UNREACHABLE();
|
| - return NULL;
|
| + if (op == kMathLog) {
|
| + LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| + LInstruction* result = new LUnaryMathOperation(input);
|
| + return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| + } else {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LInstruction* result = new LUnaryMathOperation(input);
|
| + switch (op) {
|
| + case kMathAbs:
|
| + return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| + case kMathFloor:
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| + case kMathRound:
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| + case kMathSqrt:
|
| + return DefineSameAsFirst(result);
|
| + case kMathPowHalf:
|
| + return AssignEnvironment(DefineSameAsFirst(result));
|
| + default:
|
| + UNREACHABLE();
|
| + return NULL;
|
| + }
|
| }
|
| }
|
|
|
|
|