floating point environment/exceptions support for mips
[musl] / src / fenv / mips / fenv.s
diff --git a/src/fenv/mips/fenv.s b/src/fenv/mips/fenv.s
new file mode 100644 (file)
index 0000000..49ff36c
--- /dev/null
@@ -0,0 +1,60 @@
+.set noreorder
+
+.global feclearexcept
+.type  feclearexcept,@function
+feclearexcept:
+       cfc1    $5, $31
+       or      $5, $5, $4
+       xor     $5, $5, $4
+       ctc1    $5, $31
+       jr      $ra
+       li      $2, 0
+
+.global feraiseexcept
+.type  feraiseexcept,@function
+feraiseexcept:
+       cfc1    $5, $31
+       or      $5, $5, $4
+       ctc1    $5, $31
+       jr      $ra
+       li      $2, 0
+
+.global fetestexcept
+.type  fetestexcept,@function
+fetestexcept:
+       cfc1    $2, $31
+       jr      $ra
+       and     $2, $2, $4
+
+.global fegetround
+.type  fegetround,@function
+fegetround:
+       cfc1    $2, $31
+       jr      $ra
+       andi    $2, $2, 3
+
+.global fesetround
+.type  fesetround,@function
+fesetround:
+       cfc1    $5, $31
+       li      $6, -4
+       and     $5, $5, $6
+       or      $5, $5, $4
+       jr      $ra
+       li      $2, 0
+
+.global fegetenv
+.type  fegetenv,@function
+fegetenv:
+       cfc1    $5, $31
+       sw      $5, 0($4)
+       jr      $ra
+       li      $2, 0
+
+.global fesetenv
+.type  fesetenv,@function
+fesetenv:
+       lw      $5, 0($4)
+       ctc1    $5, $31
+       jr      $ra
+       li      $2, 0