* Get8087CW: use fixed stack.

* Set8087CW: updated to i386 version, eliminates need of PIC code in assembler.
* GetSSECSR: updated similar to Get8087CW, it is somewhat shorter that way.

git-svn-id: trunk@19463 -
This commit is contained in:
sergei 2011-10-11 09:08:09 +00:00
parent 21ac5dfb3b
commit 4a3c7f7ef4

View File

@ -17,7 +17,7 @@ label
FPC_ABSMASK_DOUBLE, FPC_ABSMASK_DOUBLE,
FPC_ABSMASK_SINGLE; FPC_ABSMASK_SINGLE;
procedure dummyproc;assembler; procedure dummyproc;assembler;nostackframe;
asm asm
.data .data
.balign 16 .balign 16
@ -36,27 +36,22 @@ FPC_ABSMASK_DOUBLE:
FPU Control word FPU Control word
****************************************************************************} ****************************************************************************}
procedure Set8087CW(cw:word);assembler; procedure Set8087CW(cw:word);
begin
default8087cw:=cw;
asm asm
movw cw,%ax
{$ifdef FPC_PIC}
movq default8087cw@GOTPCREL(%rip),%rdx
movw %ax,(%rdx)
fnclex fnclex
fldcw (%rdx) fldcw cw
{$else FPC_PIC} end;
movw %ax,default8087cw{$ifdef FPC_HAS_RIP_RELATIVE}(%rip){$endif}
fnclex
fldcw default8087cw{$ifdef FPC_HAS_RIP_RELATIVE}(%rip){$endif}
{$endif FPC_PIC}
end; end;
function Get8087CW:word;assembler; function Get8087CW:word;assembler;
var
tmp: word;
asm asm
pushq $0 fnstcw tmp
fnstcw (%rsp) movq tmp,%rax
popq %rax
end; end;
@ -69,14 +64,12 @@ FPC_ABSMASK_DOUBLE:
end; end;
function GetSSECSR : dword; function GetSSECSR : dword;assembler;
var var
_w : dword; _w : dword;
begin
asm asm
stmxcsr _w stmxcsr _w
end; movl _w,%eax
result:=_w;
end; end;
{**************************************************************************** {****************************************************************************