2: not %ecx | |
sub $32,%esp | |
fnstenv (%esp) | |
and %ecx,4(%esp) | |
or %edx,4(%esp) | |
fldenv (%esp) | |
add $32,%esp | |
ret | |
.global feclearexcept | |
feclearexcept: | |
xor %eax,%eax | |
mov 4(%esp),%ecx | |
xor %edx,%edx | |
test %ecx,%ecx | |
jnz 2b | |
ret | |
.global feraiseexcept | |
feraiseexcept: | |
xor %eax,%eax | |
mov 4(%esp),%edx | |
xor %ecx,%ecx | |
test %edx,%edx | |
jnz 2b | |
ret | |
.global fesetround | |
fesetround: | |
xor %eax,%eax | |
mov $0xc00,%ecx | |
mov 4(%esp),%edx | |
jmp 2b | |
.global fegetround | |
fegetround: | |
sub $28,%esp | |
fnstenv (%esp) | |
mov 4(%esp),%eax | |
add $28,%esp | |
and $0xc,%ah | |
ret | |
.global fegetenv | |
fegetenv: | |
mov 4(%esp),%ecx | |
xor %eax,%eax | |
fnstenv (%ecx) | |
ret | |
.global fesetenv | |
fesetenv: | |
mov 4(%esp),%ecx | |
xor %eax,%eax | |
test %ecx,%ecx | |
jz 1f | |
fldenv (%ecx) | |
ret | |
1: push %eax | |
push %eax | |
push %eax | |
push %eax | |
push %eax | |
push %eax | |
pushl $0x37f | |
fldenv (%esp) | |
add $28,%esp | |
ret | |
.global fetestexcept | |
fetestexcept: | |
mov 4(%esp),%ecx | |
fnstsw %ax | |
and %ecx,%eax | |
ret |