xref: /aosp_15_r20/external/musl/src/fenv/x32/fenv.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker.global feclearexcept
2*c9945492SAndroid Build Coastguard Worker.type feclearexcept,@function
3*c9945492SAndroid Build Coastguard Workerfeclearexcept:
4*c9945492SAndroid Build Coastguard Worker		# maintain exceptions in the sse mxcsr, clear x87 exceptions
5*c9945492SAndroid Build Coastguard Worker	mov %edi,%ecx
6*c9945492SAndroid Build Coastguard Worker	and $0x3f,%ecx
7*c9945492SAndroid Build Coastguard Worker	fnstsw %ax
8*c9945492SAndroid Build Coastguard Worker	test %eax,%ecx
9*c9945492SAndroid Build Coastguard Worker	jz 1f
10*c9945492SAndroid Build Coastguard Worker	fnclex
11*c9945492SAndroid Build Coastguard Worker1:	stmxcsr -8(%esp)
12*c9945492SAndroid Build Coastguard Worker	and $0x3f,%eax
13*c9945492SAndroid Build Coastguard Worker	or %eax,-8(%esp)
14*c9945492SAndroid Build Coastguard Worker	test %ecx,-8(%esp)
15*c9945492SAndroid Build Coastguard Worker	jz 1f
16*c9945492SAndroid Build Coastguard Worker	not %ecx
17*c9945492SAndroid Build Coastguard Worker	and %ecx,-8(%esp)
18*c9945492SAndroid Build Coastguard Worker	ldmxcsr -8(%esp)
19*c9945492SAndroid Build Coastguard Worker1:	xor %eax,%eax
20*c9945492SAndroid Build Coastguard Worker	ret
21*c9945492SAndroid Build Coastguard Worker
22*c9945492SAndroid Build Coastguard Worker.global feraiseexcept
23*c9945492SAndroid Build Coastguard Worker.type feraiseexcept,@function
24*c9945492SAndroid Build Coastguard Workerferaiseexcept:
25*c9945492SAndroid Build Coastguard Worker	and $0x3f,%edi
26*c9945492SAndroid Build Coastguard Worker	stmxcsr -8(%esp)
27*c9945492SAndroid Build Coastguard Worker	or %edi,-8(%esp)
28*c9945492SAndroid Build Coastguard Worker	ldmxcsr -8(%esp)
29*c9945492SAndroid Build Coastguard Worker	xor %eax,%eax
30*c9945492SAndroid Build Coastguard Worker	ret
31*c9945492SAndroid Build Coastguard Worker
32*c9945492SAndroid Build Coastguard Worker.global __fesetround
33*c9945492SAndroid Build Coastguard Worker.hidden __fesetround
34*c9945492SAndroid Build Coastguard Worker.type __fesetround,@function
35*c9945492SAndroid Build Coastguard Worker__fesetround:
36*c9945492SAndroid Build Coastguard Worker	push %rax
37*c9945492SAndroid Build Coastguard Worker	xor %eax,%eax
38*c9945492SAndroid Build Coastguard Worker	mov %edi,%ecx
39*c9945492SAndroid Build Coastguard Worker	fnstcw (%esp)
40*c9945492SAndroid Build Coastguard Worker	andb $0xf3,1(%esp)
41*c9945492SAndroid Build Coastguard Worker	or %ch,1(%esp)
42*c9945492SAndroid Build Coastguard Worker	fldcw (%esp)
43*c9945492SAndroid Build Coastguard Worker	stmxcsr (%esp)
44*c9945492SAndroid Build Coastguard Worker	shl $3,%ch
45*c9945492SAndroid Build Coastguard Worker	andb $0x9f,1(%esp)
46*c9945492SAndroid Build Coastguard Worker	or %ch,1(%esp)
47*c9945492SAndroid Build Coastguard Worker	ldmxcsr (%esp)
48*c9945492SAndroid Build Coastguard Worker	pop %rcx
49*c9945492SAndroid Build Coastguard Worker	ret
50*c9945492SAndroid Build Coastguard Worker
51*c9945492SAndroid Build Coastguard Worker.global fegetround
52*c9945492SAndroid Build Coastguard Worker.type fegetround,@function
53*c9945492SAndroid Build Coastguard Workerfegetround:
54*c9945492SAndroid Build Coastguard Worker	push %rax
55*c9945492SAndroid Build Coastguard Worker	stmxcsr (%esp)
56*c9945492SAndroid Build Coastguard Worker	pop %rax
57*c9945492SAndroid Build Coastguard Worker	shr $3,%eax
58*c9945492SAndroid Build Coastguard Worker	and $0xc00,%eax
59*c9945492SAndroid Build Coastguard Worker	ret
60*c9945492SAndroid Build Coastguard Worker
61*c9945492SAndroid Build Coastguard Worker.global fegetenv
62*c9945492SAndroid Build Coastguard Worker.type fegetenv,@function
63*c9945492SAndroid Build Coastguard Workerfegetenv:
64*c9945492SAndroid Build Coastguard Worker	xor %eax,%eax
65*c9945492SAndroid Build Coastguard Worker	fnstenv (%edi)
66*c9945492SAndroid Build Coastguard Worker	stmxcsr 28(%edi)
67*c9945492SAndroid Build Coastguard Worker	ret
68*c9945492SAndroid Build Coastguard Worker
69*c9945492SAndroid Build Coastguard Worker.global fesetenv
70*c9945492SAndroid Build Coastguard Worker.type fesetenv,@function
71*c9945492SAndroid Build Coastguard Workerfesetenv:
72*c9945492SAndroid Build Coastguard Worker	xor %eax,%eax
73*c9945492SAndroid Build Coastguard Worker	inc %edi
74*c9945492SAndroid Build Coastguard Worker	jz 1f
75*c9945492SAndroid Build Coastguard Worker	fldenv -1(%edi)
76*c9945492SAndroid Build Coastguard Worker	ldmxcsr 27(%edi)
77*c9945492SAndroid Build Coastguard Worker	ret
78*c9945492SAndroid Build Coastguard Worker1:	push %rax
79*c9945492SAndroid Build Coastguard Worker	push %rax
80*c9945492SAndroid Build Coastguard Worker	pushq $0xffff
81*c9945492SAndroid Build Coastguard Worker	pushq $0x37f
82*c9945492SAndroid Build Coastguard Worker	fldenv (%esp)
83*c9945492SAndroid Build Coastguard Worker	pushq $0x1f80
84*c9945492SAndroid Build Coastguard Worker	ldmxcsr (%esp)
85*c9945492SAndroid Build Coastguard Worker	add $40,%esp
86*c9945492SAndroid Build Coastguard Worker	ret
87*c9945492SAndroid Build Coastguard Worker
88*c9945492SAndroid Build Coastguard Worker.global fetestexcept
89*c9945492SAndroid Build Coastguard Worker.type fetestexcept,@function
90*c9945492SAndroid Build Coastguard Workerfetestexcept:
91*c9945492SAndroid Build Coastguard Worker	and $0x3f,%edi
92*c9945492SAndroid Build Coastguard Worker	push %rax
93*c9945492SAndroid Build Coastguard Worker	stmxcsr (%esp)
94*c9945492SAndroid Build Coastguard Worker	pop %rsi
95*c9945492SAndroid Build Coastguard Worker	fnstsw %ax
96*c9945492SAndroid Build Coastguard Worker	or %esi,%eax
97*c9945492SAndroid Build Coastguard Worker	and %edi,%eax
98*c9945492SAndroid Build Coastguard Worker	ret
99