|
@@ -262,8 +262,25 @@ implementation
|
|
|
|
|
|
procedure tx86inlinenode.second_sqrt_real;
|
|
procedure tx86inlinenode.second_sqrt_real;
|
|
begin
|
|
begin
|
|
- load_fpu_location;
|
|
|
|
- emit_none(A_FSQRT,S_NO);
|
|
|
|
|
|
+ if use_sse(resulttype.def) then
|
|
|
|
+ begin
|
|
|
|
+ secondpass(left);
|
|
|
|
+ location_force_mmregscalar(exprasmlist,left.location,false);
|
|
|
|
+ location:=left.location;
|
|
|
|
+ case tfloatdef(resulttype.def).typ of
|
|
|
|
+ s32real:
|
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_SQRTSS,S_XMM,location.register,location.register));
|
|
|
|
+ s64real:
|
|
|
|
+ exprasmlist.concat(taicpu.op_reg_reg(A_SQRTSD,S_XMM,location.register,location.register));
|
|
|
|
+ else
|
|
|
|
+ internalerror(200510031);
|
|
|
|
+ end;
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ load_fpu_location;
|
|
|
|
+ emit_none(A_FSQRT,S_NO);
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure tx86inlinenode.second_ln_real;
|
|
procedure tx86inlinenode.second_ln_real;
|