| Index: runtime/vm/flow_graph_compiler_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_compiler_ia32.cc (revision 8700)
|
| +++ runtime/vm/flow_graph_compiler_ia32.cc (working copy)
|
| @@ -71,6 +71,30 @@
|
| }
|
|
|
|
|
| +void FlowGraphCompiler::GenerateInlinedMathSqrt(Label* done) {
|
| + Label smi_to_double, double_op, call_method;
|
| + __ movl(EAX, Address(ESP, 0));
|
| + __ testl(EAX, Immediate(kSmiTagMask));
|
| + __ j(ZERO, &smi_to_double);
|
| + __ CompareClassId(EAX, kDouble, EBX);
|
| + __ j(NOT_EQUAL, &call_method);
|
| + __ movsd(XMM1, FieldAddress(EAX, Double::value_offset()));
|
| + __ Bind(&double_op);
|
| + __ sqrtsd(XMM0, XMM1);
|
| + AssemblerMacros::TryAllocate(assembler_,
|
| + double_class_,
|
| + &call_method,
|
| + EAX); // Result register.
|
| + __ movsd(FieldAddress(EAX, Double::value_offset()), XMM0);
|
| + __ jmp(done);
|
| + __ Bind(&smi_to_double);
|
| + __ SmiUntag(EAX);
|
| + __ cvtsi2sd(XMM1, EAX);
|
| + __ jmp(&double_op);
|
| + __ Bind(&call_method);
|
| +}
|
| +
|
| +
|
| void FlowGraphCompiler::GenerateCallRuntime(intptr_t cid,
|
| intptr_t token_index,
|
| intptr_t try_index,
|
|
|