#ifndef __loongarch_soft_float .global feclearexcept .type feclearexcept,@function feclearexcept: li.w $a1, 0x1f0000 //flags in 16-20 bit of fcsr0. and $a0, $a0, $a1 movfcsr2gr $a1, $r0 or $a1, $a1, $a0 xor $a1, $a1, $a0 movgr2fcsr $r0, $a1 li.w $v0, 0 jirl $zero, $ra, 0 .global feraiseexcept .type feraiseexcept,@function feraiseexcept: li.w $a1, 0x1f0000 and $a0, $a0, $a1 movfcsr2gr $a1, $r0 or $a1, $a1, $a0 movgr2fcsr $r0, $a1 li.w $v0, 0 jirl $zero, $ra, 0 .global fetestexcept .type fetestexcept,@function fetestexcept: li.w $a1, 0x1f0000 and $a0, $a0, $a1 movfcsr2gr $a1, $r0 and $v0, $a1, $a0 jirl $zero, $ra, 0 .global fegetround .type fegetround,@function fegetround: movfcsr2gr $v0, $r0 andi $v0, $v0, 0x300 //fcsr0.RM jirl $zero, $ra, 0 .global __fesetround .hidden __fesetround .type __fesetround,@function __fesetround: movfcsr2gr $a1, $r0 li.w $a2, -769 //0xfffffcff and $a1, $a1, $a2 or $a1, $a1, $a0 movgr2fcsr $r0, $a1 li.w $v0, 0 jirl $zero, $ra, 0 .global fegetenv .type fegetenv,@function fegetenv: movfcsr2gr $a1, $r0 st.w $a1, $a0, 0 li.w $v0, 0 jirl $zero, $ra, 0 .global fesetenv .type fesetenv,@function fesetenv: addi.d $a1, $a0, 1 beq $a1, $r0, 1f ld.w $a1, $a0, 0 1: movgr2fcsr $r0, $a1 li.w $v0, 0 jirl $zero, $ra, 0 #endif