Index: src/ia32/lithium-ia32.cc |
diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc |
index 4e5f2785497818ccd179cf2dc47a6d1ceb59c47e..ecb490de5e70707b5db5fff40a940b0f26ccb34c 100644 |
--- a/src/ia32/lithium-ia32.cc |
+++ b/src/ia32/lithium-ia32.cc |
@@ -298,6 +298,12 @@ void LUnaryMathOperation::PrintDataTo(StringStream* stream) { |
} |
+void LMathPowHalf::PrintDataTo(StringStream* stream) { |
+ stream->Add("/pow_half "); |
+ InputAt(0)->PrintTo(stream); |
+} |
+ |
+ |
void LLoadContextSlot::PrintDataTo(StringStream* stream) { |
InputAt(0)->PrintTo(stream); |
stream->Add("[%d]", slot_index()); |
@@ -1184,6 +1190,11 @@ LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) { |
} else { |
LOperand* input = UseRegisterAtStart(instr->value()); |
LOperand* context = UseAny(instr->context()); // Deferred use by MathAbs. |
+ if (op == kMathPowHalf) { |
+ LOperand* temp = TempRegister(); |
+ LMathPowHalf* result = new(zone()) LMathPowHalf(context, input, temp); |
+ return DefineSameAsFirst(result); |
+ } |
LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context, |
input); |
switch (op) { |
@@ -1195,8 +1206,6 @@ LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) { |
return AssignEnvironment(DefineAsRegister(result)); |
case kMathSqrt: |
return DefineSameAsFirst(result); |
- case kMathPowHalf: |
- return DefineSameAsFirst(result); |
default: |
UNREACHABLE(); |
return NULL; |