mirror of git://git.musl-libc.org/musl
x86_64 fenv support (untested; at least known to build successfully)
This commit is contained in:
parent
52cf24a0f4
commit
773b0fe447
|
@ -0,0 +1,88 @@
|
|||
2: not %edi
|
||||
sub $32,%rsp
|
||||
fnstenv (%rsp)
|
||||
and %edi,4(%rsp)
|
||||
or %esi,4(%rsp)
|
||||
fldenv (%rsp)
|
||||
stmxcsr (%rsp)
|
||||
and %edi,(%rsp)
|
||||
ldmxcsr (%rsp)
|
||||
add $32,%rsp
|
||||
ret
|
||||
|
||||
.global feclearexcept
|
||||
feclearexcept:
|
||||
xor %eax,%eax
|
||||
xor %esi,%esi
|
||||
test %edi,%edi
|
||||
jnz 2b
|
||||
ret
|
||||
|
||||
.global feraiseexcept
|
||||
feraiseexcept:
|
||||
xor %eax,%eax
|
||||
mov %edi,%esi
|
||||
xor %edi,%edi
|
||||
test %esi,%esi
|
||||
jnz 2b
|
||||
ret
|
||||
|
||||
.global fesetround
|
||||
fesetround:
|
||||
xor %eax,%eax
|
||||
sub $32,%rsp
|
||||
fnstenv (%rsp)
|
||||
andb $0xf3,1(%rsp)
|
||||
or %edi,(%rsp)
|
||||
fldenv (%rsp)
|
||||
stmxcsr (%rsp)
|
||||
shl $3,%edi
|
||||
andb $0x9f,1(%rsp)
|
||||
or %edi,(%rsp)
|
||||
ldmxcsr (%rsp)
|
||||
add $32,%rsp
|
||||
ret
|
||||
|
||||
.global fegetround
|
||||
fegetround:
|
||||
push %rax
|
||||
stmxcsr (%rsp)
|
||||
pop %rax
|
||||
shr $3,%eax
|
||||
and $0xc,%ah
|
||||
ret
|
||||
|
||||
.global fegetenv
|
||||
fegetenv:
|
||||
xor %eax,%eax
|
||||
fnstenv (%rdi)
|
||||
stmxcsr 28(%rdi)
|
||||
ret
|
||||
|
||||
.global fesetenv
|
||||
fesetenv:
|
||||
xor %eax,%eax
|
||||
inc %rdi
|
||||
jz 1f
|
||||
fldenv -1(%rdi)
|
||||
ldmxcsr 27(%rdi)
|
||||
ret
|
||||
1: push %rax
|
||||
push %rax
|
||||
push %rax
|
||||
pushq $0x37f
|
||||
fldenv (%rsp)
|
||||
pushq $0x1f80
|
||||
ldmxcsr (%rsp)
|
||||
add $40,%rsp
|
||||
ret
|
||||
|
||||
.global fetestexcept
|
||||
fetestexcept:
|
||||
push %rax
|
||||
stmxcsr (%rsp)
|
||||
pop %rsi
|
||||
fnstsw %ax
|
||||
or %esi,%eax
|
||||
and %edi,%eax
|
||||
ret
|
Loading…
Reference in New Issue