| Index: fusl/src/fenv/x86_64/fenv.s | 
| diff --git a/fusl/src/fenv/x86_64/fenv.s b/fusl/src/fenv/x86_64/fenv.s | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..b5aeaf4f494df7ddbf46664f427f5c887b618a6f | 
| --- /dev/null | 
| +++ b/fusl/src/fenv/x86_64/fenv.s | 
| @@ -0,0 +1,97 @@ | 
| +.global feclearexcept | 
| +.type feclearexcept,@function | 
| +feclearexcept: | 
| +		# maintain exceptions in the sse mxcsr, clear x87 exceptions | 
| +	mov %edi,%ecx | 
| +	and $0x3f,%ecx | 
| +	fnstsw %ax | 
| +	test %eax,%ecx | 
| +	jz 1f | 
| +	fnclex | 
| +1:	stmxcsr -8(%rsp) | 
| +	and $0x3f,%eax | 
| +	or %eax,-8(%rsp) | 
| +	test %ecx,-8(%rsp) | 
| +	jz 1f | 
| +	not %ecx | 
| +	and %ecx,-8(%rsp) | 
| +	ldmxcsr -8(%rsp) | 
| +1:	xor %eax,%eax | 
| +	ret | 
| + | 
| +.global feraiseexcept | 
| +.type feraiseexcept,@function | 
| +feraiseexcept: | 
| +	and $0x3f,%edi | 
| +	stmxcsr -8(%rsp) | 
| +	or %edi,-8(%rsp) | 
| +	ldmxcsr -8(%rsp) | 
| +	xor %eax,%eax | 
| +	ret | 
| + | 
| +.global __fesetround | 
| +.type __fesetround,@function | 
| +__fesetround: | 
| +	push %rax | 
| +	xor %eax,%eax | 
| +	mov %edi,%ecx | 
| +	fnstcw (%rsp) | 
| +	andb $0xf3,1(%rsp) | 
| +	or %ch,1(%rsp) | 
| +	fldcw (%rsp) | 
| +	stmxcsr (%rsp) | 
| +	shl $3,%ch | 
| +	andb $0x9f,1(%rsp) | 
| +	or %ch,1(%rsp) | 
| +	ldmxcsr (%rsp) | 
| +	pop %rcx | 
| +	ret | 
| + | 
| +.global fegetround | 
| +.type fegetround,@function | 
| +fegetround: | 
| +	push %rax | 
| +	stmxcsr (%rsp) | 
| +	pop %rax | 
| +	shr $3,%eax | 
| +	and $0xc00,%eax | 
| +	ret | 
| + | 
| +.global fegetenv | 
| +.type fegetenv,@function | 
| +fegetenv: | 
| +	xor %eax,%eax | 
| +	fnstenv (%rdi) | 
| +	stmxcsr 28(%rdi) | 
| +	ret | 
| + | 
| +.global fesetenv | 
| +.type fesetenv,@function | 
| +fesetenv: | 
| +	xor %eax,%eax | 
| +	inc %rdi | 
| +	jz 1f | 
| +	fldenv -1(%rdi) | 
| +	ldmxcsr 27(%rdi) | 
| +	ret | 
| +1:	push %rax | 
| +	push %rax | 
| +	pushq $0xffff | 
| +	pushq $0x37f | 
| +	fldenv (%rsp) | 
| +	pushq $0x1f80 | 
| +	ldmxcsr (%rsp) | 
| +	add $40,%rsp | 
| +	ret | 
| + | 
| +.global fetestexcept | 
| +.type fetestexcept,@function | 
| +fetestexcept: | 
| +	and $0x3f,%edi | 
| +	push %rax | 
| +	stmxcsr (%rsp) | 
| +	pop %rsi | 
| +	fnstsw %ax | 
| +	or %esi,%eax | 
| +	and %edi,%eax | 
| +	ret | 
|  |