master
1#ifndef __loongarch_soft_float
2
3#ifdef BROKEN_LOONGARCH_FCSR_ASM
4#define FCSR $r0
5#else
6#define FCSR $fcsr0
7#endif
8
9.global feclearexcept
10.type feclearexcept,@function
11feclearexcept:
12 li.w $t0, 0x1f0000
13 and $a0, $a0, $t0
14 movfcsr2gr $t1, FCSR
15 andn $t1, $t1, $a0
16 movgr2fcsr FCSR, $t1
17 li.w $a0, 0
18 jr $ra
19
20.global feraiseexcept
21.type feraiseexcept,@function
22feraiseexcept:
23 li.w $t0, 0x1f0000
24 and $a0, $a0, $t0
25 movfcsr2gr $t1, FCSR
26 or $t1, $t1, $a0
27 movgr2fcsr FCSR, $t1
28 li.w $a0, 0
29 jr $ra
30
31.global fetestexcept
32.type fetestexcept,@function
33fetestexcept:
34 li.w $t0, 0x1f0000
35 and $a0, $a0, $t0
36 movfcsr2gr $t1, FCSR
37 and $a0, $t1, $a0
38 jr $ra
39
40.global fegetround
41.type fegetround,@function
42fegetround:
43 movfcsr2gr $t0, FCSR
44 andi $a0, $t0, 0x300
45 jr $ra
46
47.global __fesetround
48.hidden __fesetround
49.type __fesetround,@function
50__fesetround:
51 li.w $t0, 0x300
52 and $a0, $a0, $t0
53 movfcsr2gr $t1, FCSR
54 andn $t1, $t1, $t0
55 or $t1, $t1, $a0
56 movgr2fcsr FCSR, $t1
57 li.w $a0, 0
58 jr $ra
59
60.global fegetenv
61.type fegetenv,@function
62fegetenv:
63 movfcsr2gr $t0, FCSR
64 st.w $t0, $a0, 0
65 li.w $a0, 0
66 jr $ra
67
68.global fesetenv
69.type fesetenv,@function
70fesetenv:
71 addi.d $t0, $a0, 1
72 beq $t0, $r0, 1f
73 ld.w $t0, $a0, 0
741: movgr2fcsr FCSR, $t0
75 li.w $a0, 0
76 jr $ra
77
78#endif