|
@@ -190,7 +190,7 @@ FPC_ABSMASK_DOUBLE:
|
|
fwait
|
|
fwait
|
|
fldt d
|
|
fldt d
|
|
frndint
|
|
frndint
|
|
- fnclex
|
|
|
|
|
|
+ fwait
|
|
fldcw -4(%rbp)
|
|
fldcw -4(%rbp)
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -203,39 +203,29 @@ FPC_ABSMASK_DOUBLE:
|
|
newcw : word;
|
|
newcw : word;
|
|
res : int64;
|
|
res : int64;
|
|
asm
|
|
asm
|
|
- fnstcw oldcw
|
|
|
|
- fwait
|
|
|
|
- movw oldcw,%cx
|
|
|
|
- orw $0x0c3f,%cx
|
|
|
|
- movw %cx,newcw
|
|
|
|
- fldcw newcw
|
|
|
|
- fwait
|
|
|
|
- fldt d
|
|
|
|
- fistpq res
|
|
|
|
- movq res,%rax
|
|
|
|
- fnclex
|
|
|
|
- fldcw oldcw
|
|
|
|
|
|
+ fnstcw oldcw
|
|
|
|
+ fwait
|
|
|
|
+ movw oldcw,%cx
|
|
|
|
+ orw $0x0c3f,%cx
|
|
|
|
+ movw %cx,newcw
|
|
|
|
+ fldcw newcw
|
|
|
|
+ fldt d
|
|
|
|
+ fistpq res
|
|
|
|
+ fwait
|
|
|
|
+ movq res,%rax
|
|
|
|
+ fldcw oldcw
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
{$define FPC_SYSTEM_HAS_ROUND}
|
|
{$define FPC_SYSTEM_HAS_ROUND}
|
|
function fpc_round_real(d : ValReal) : int64;assembler;compilerproc;
|
|
function fpc_round_real(d : ValReal) : int64;assembler;compilerproc;
|
|
var
|
|
var
|
|
- oldcw,
|
|
|
|
- newcw : word;
|
|
|
|
res : int64;
|
|
res : int64;
|
|
asm
|
|
asm
|
|
- fnstcw oldcw
|
|
|
|
- fwait
|
|
|
|
- movw $0x1372,newcw
|
|
|
|
- fnclex
|
|
|
|
- fldcw newcw
|
|
|
|
- fwait
|
|
|
|
- fldt d
|
|
|
|
- fistpq res
|
|
|
|
- movq res,%rax
|
|
|
|
- fnclex
|
|
|
|
- fldcw oldcw
|
|
|
|
|
|
+ fldt d
|
|
|
|
+ fistpq res
|
|
|
|
+ fwait
|
|
|
|
+ movq res,%rax
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|