| Index: src/x64/lithium-x64.cc
|
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc
|
| index df6913b9c1a2b89916a42e39d68a02ffc2307924..ba29ed969df4e811c9f409ab955b499f8a9ce970 100644
|
| --- a/src/x64/lithium-x64.cc
|
| +++ b/src/x64/lithium-x64.cc
|
| @@ -304,17 +304,6 @@ void LCallConstantFunction::PrintDataTo(StringStream* stream) {
|
| }
|
|
|
|
|
| -void LUnaryMathOperation::PrintDataTo(StringStream* stream) {
|
| - stream->Add("/%s ", hydrogen()->OpName());
|
| - value()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| -void LMathExp::PrintDataTo(StringStream* stream) {
|
| - value()->PrintTo(stream);
|
| -}
|
| -
|
| -
|
| void LLoadContextSlot::PrintDataTo(StringStream* stream) {
|
| context()->PrintTo(stream);
|
| stream->Add("[%d]", slot_index());
|
| @@ -1130,41 +1119,97 @@ LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
| - BuiltinFunctionId op = instr->op();
|
| - if (op == kMathLog || op == kMathSin || op == kMathCos || op == kMathTan) {
|
| - LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| - LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(input);
|
| - return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| - } else if (op == kMathExp) {
|
| - ASSERT(instr->representation().IsDouble());
|
| - ASSERT(instr->value()->representation().IsDouble());
|
| - LOperand* value = UseTempRegister(instr->value());
|
| - LOperand* temp1 = TempRegister();
|
| - LOperand* temp2 = TempRegister();
|
| - LMathExp* result = new(zone()) LMathExp(value, temp1, temp2);
|
| - return DefineAsRegister(result);
|
| - } else {
|
| - LOperand* input = UseRegisterAtStart(instr->value());
|
| - LUnaryMathOperation* result = new(zone()) 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;
|
| - }
|
| + switch (instr->op()) {
|
| + case kMathFloor: return DoMathFloor(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);
|
| + default:
|
| + UNREACHABLE();
|
| + return NULL;
|
| }
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoMathFloor(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LMathFloor* result = new(zone()) LMathFloor(input);
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| +}
|
| +
|
| +
|
| +LInstruction* LChunkBuilder::DoMathRound(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LMathRound* result = new(zone()) LMathRound(input);
|
| + return AssignEnvironment(DefineAsRegister(result));
|
| +}
|
| +
|
| +LInstruction* LChunkBuilder::DoMathAbs(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LMathAbs* result = new(zone()) LMathAbs(input);
|
| + return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| +}
|
| +
|
| +
|
| +LInstruction* LChunkBuilder::DoMathLog(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| + LMathLog* result = new(zone()) LMathLog(input);
|
| + return MarkAsCall(DefineFixedDouble(result, xmm1), 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());
|
| + LOperand* value = UseTempRegister(instr->value());
|
| + LOperand* temp1 = TempRegister();
|
| + LOperand* temp2 = TempRegister();
|
| + LMathExp* result = new(zone()) LMathExp(value, temp1, temp2);
|
| + return DefineAsRegister(result);
|
| +}
|
| +
|
| +
|
| +LInstruction* LChunkBuilder::DoMathSqrt(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LMathSqrt* result = new(zone()) LMathSqrt(input);
|
| + return DefineSameAsFirst(result);
|
| +}
|
| +
|
| +
|
| +LInstruction* LChunkBuilder::DoMathPowHalf(HUnaryMathOperation* instr) {
|
| + LOperand* input = UseRegisterAtStart(instr->value());
|
| + LMathPowHalf* result = new(zone()) LMathPowHalf(input);
|
| + return DefineSameAsFirst(result);
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) {
|
| ASSERT(instr->key()->representation().IsTagged());
|
| LOperand* key = UseFixed(instr->key(), rcx);
|
|
|