| Index: src/x64/lithium-x64.cc
|
| ===================================================================
|
| --- src/x64/lithium-x64.cc (revision 6849)
|
| +++ src/x64/lithium-x64.cc (working copy)
|
| @@ -1181,8 +1181,30 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
| - Abort("Unimplemented: %s", "DoUnaryMathOperation");
|
| - return NULL;
|
| + BuiltinFunctionId op = instr->op();
|
| + if (op == kMathLog || op == kMathSin || op == kMathCos) {
|
| + LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| + LUnaryMathOperation* result = new LUnaryMathOperation(input);
|
| + return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| + } else {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LUnaryMathOperation* 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 DefineSameAsFirst(result);
|
| + default:
|
| + UNREACHABLE();
|
| + return NULL;
|
| + }
|
| + }
|
| }
|
|
|
|
|
|
|