]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips64: rework math tests to take into account allowed approximation
authorStefan Maksimovic <stefan.maksimovic@rt-rk.com>
Fri, 17 Jan 2020 12:58:07 +0000 (12:58 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Fri, 17 Jan 2020 12:58:07 +0000 (12:58 +0000)
Change the math tests to check whether the results are approximate to the
expected values instead of checking for exact matches since the calculations
in question are allowed to be approximate.

This fixes
  /none/tests/mips64/test_math and
  /none/tests/mips64/msa_fpu

on mips64r6.

none/tests/mips32/msa_fpu.c
none/tests/mips32/msa_fpu.stdout.exp
none/tests/mips32/test_math.cpp
none/tests/mips32/test_math.stdout.exp

index fea8784461c8a0e4a46f3fa2786d566c51fe704d..9a96c2a0042befbe6da0e98d8f92ecc1d7d15cab 100644 (file)
@@ -1,4 +1,6 @@
 #include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
 
 unsigned long long out[2];
 
@@ -56,6 +58,60 @@ unsigned long long data16[] = {
    0x3c66f5a5c14efc00,
 };
 
+#define EPS 0.000001
+
+union {
+   unsigned long long i[2];
+   double d[2];
+   float f[4];
+} frsqrt_out, frsqrt_exp;
+
+unsigned withinEpsOfF(float* p_out, float* p_exp, unsigned long long* data, unsigned offset) {
+   unsigned pair1_nan = isnan(p_out[2]) && isnan(p_exp[0]);
+   unsigned pair2_nan = isnan(p_out[3]) && isnan(p_exp[1]);
+   unsigned pair3_nan = isnan(p_out[0]) && isnan(p_exp[2]);
+   unsigned pair4_nan = isnan(p_out[1]) && isnan(p_exp[3]);
+   unsigned pair1_sub = fpclassify(*(((float*)data) + offset/4    )) == FP_SUBNORMAL;
+   unsigned pair2_sub = fpclassify(*(((float*)data) + offset/4 + 1)) == FP_SUBNORMAL;
+   unsigned pair3_sub = fpclassify(*(((float*)data) + offset/4 + 2)) == FP_SUBNORMAL;
+   unsigned pair4_sub = fpclassify(*(((float*)data) + offset/4 + 3)) == FP_SUBNORMAL;
+   if (pair1_sub || pair2_sub || pair3_sub || pair4_sub) {
+      unsigned p_out2_int = *(unsigned*)&p_out[2];
+      unsigned p_exp0_int = *(unsigned*)&p_exp[0];
+      unsigned p_out3_int = *(unsigned*)&p_out[3];
+      unsigned p_exp1_int = *(unsigned*)&p_exp[1];
+      unsigned p_out0_int = *(unsigned*)&p_out[0];
+      unsigned p_exp2_int = *(unsigned*)&p_exp[2];
+      unsigned p_out1_int = *(unsigned*)&p_out[1];
+      unsigned p_exp3_int = *(unsigned*)&p_exp[3];
+      pair1_sub = abs(p_out2_int - p_exp0_int) <= 1;
+      pair2_sub = abs(p_out3_int - p_exp1_int) <= 1;
+      pair3_sub = abs(p_out0_int - p_exp2_int) <= 1;
+      pair4_sub = abs(p_out1_int - p_exp3_int) <= 1;
+   }
+   return (pair1_nan || pair1_sub || ((p_out[2] <= p_exp[0] + EPS) && (p_out[2] >= p_exp[0] - EPS))) &&
+          (pair2_nan || pair2_sub || ((p_out[3] <= p_exp[1] + EPS) && (p_out[3] >= p_exp[1] - EPS))) &&
+          (pair3_nan || pair3_sub || ((p_out[0] <= p_exp[2] + EPS) && (p_out[0] >= p_exp[2] - EPS))) &&
+          (pair4_nan || pair4_sub || ((p_out[1] <= p_exp[3] + EPS) && (p_out[1] >= p_exp[3] - EPS)));
+
+}
+unsigned withinEpsOfD(double* p_out, double* p_exp, unsigned long long* data, unsigned offset) {
+   unsigned pair1_nan = isnan(p_out[0]) && isnan(p_exp[1]);
+   unsigned pair2_nan = isnan(p_out[1]) && isnan(p_exp[0]);
+   unsigned pair1_sub = fpclassify(*(((double*)data) + offset/8    )) == FP_SUBNORMAL;
+   unsigned pair2_sub = fpclassify(*(((double*)data) + offset/8 + 1)) == FP_SUBNORMAL;
+   if (pair1_sub || pair2_sub) {
+      unsigned long p_out0_int = *(unsigned long*)&p_out[0];
+      unsigned long p_exp1_int = *(unsigned long*)&p_exp[1];
+      unsigned long p_out1_int = *(unsigned long*)&p_out[1];
+      unsigned long p_exp0_int = *(unsigned long*)&p_exp[0];
+      pair1_sub = labs(p_out0_int - p_exp1_int) <= 1;
+      pair2_sub = labs(p_out1_int - p_exp0_int) <= 1;
+   }
+   return (pair1_nan || pair1_sub || ((p_out[0] <= p_exp[1] + EPS) && (p_out[0] >= p_exp[1] - EPS))) &&
+          (pair2_nan || pair2_sub || ((p_out[1] <= p_exp[0] + EPS) && (p_out[1] >= p_exp[0] - EPS)));
+}
+
 #define TEST_3RF(instruction, data, offset1, offset2, WD, WS, WT)      \
 {                                                                      \
    __asm__ volatile (                                                  \
@@ -136,6 +192,61 @@ unsigned long long data16[] = {
           data[offset / 8 + 1], data[offset / 8], msacsr);             \
 }
 
+#define TEST_2RF_FRSQRT_W(instruction, data, offset, WD, WS,           \
+                          exp_part1, exp_part2)                        \
+{                                                                      \
+   frsqrt_exp.i[0] = exp_part1;                                        \
+   frsqrt_exp.i[1] = exp_part2;                                        \
+   __asm__ volatile (                                                  \
+      ".set push;\n\t"                                                 \
+      ".set noreorder;\n\t"                                            \
+      "ctcmsa $1, %2\n\t"                                              \
+      "move $t0, %0\n\t"                                               \
+      "ld.d $"#WD", "#offset"($t0)\n\t"                                \
+      "xori.b $"#WD", $"#WD", 0xff\n\t"                                \
+      "ld.d $"#WS", "#offset"($t0)\n\t"                                \
+      instruction" $"#WD", $"#WS"\n\t"                                 \
+      "move $t0, %1\n\t"                                               \
+      "st.d $"#WD", 0($t0)\n\t"                                        \
+      "cfcmsa %2, $1\n\t"                                              \
+      ".set pop;\n\t"                                                  \
+      :                                                                \
+      : "r" (data), "r" (frsqrt_out.f), "r"(msacsr)                    \
+      : "t0", "memory"                                                 \
+   );                                                                  \
+   if(withinEpsOfF(frsqrt_out.f, frsqrt_exp.f, data, offset))          \
+      printf(instruction" $"#WD", $"#WS", msacsr=%u: PASS\n", msacsr); \
+   else                                                                \
+      printf(instruction" $"#WD", $"#WS", msacsr=%u: FAIL\n", msacsr); \
+}
+
+#define TEST_2RF_FRSQRT_D(instruction, data, offset, WD, WS,           \
+                          exp_part1, exp_part2)                        \
+{                                                                      \
+   frsqrt_exp.i[0] = exp_part1;                                        \
+   frsqrt_exp.i[1] = exp_part2;                                        \
+   __asm__ volatile (                                                  \
+      ".set push;\n\t"                                                 \
+      ".set noreorder;\n\t"                                            \
+      "ctcmsa $1, %2\n\t"                                              \
+      "move $t0, %0\n\t"                                               \
+      "ld.d $"#WD", "#offset"($t0)\n\t"                                \
+      "xori.b $"#WD", $"#WD", 0xff\n\t"                                \
+      "ld.d $"#WS", "#offset"($t0)\n\t"                                \
+      instruction" $"#WD", $"#WS"\n\t"                                 \
+      "move $t0, %1\n\t"                                               \
+      "st.d $"#WD", 0($t0)\n\t"                                        \
+      "cfcmsa %2, $1\n\t"                                              \
+      ".set pop;\n\t"                                                  \
+      :                                                                \
+      : "r" (data), "r" (frsqrt_out.d), "r"(msacsr)                    \
+      : "t0", "memory"                                                 \
+   );                                                                  \
+   if(withinEpsOfD(frsqrt_out.d, frsqrt_exp.d, data, offset))          \
+      printf(instruction" $"#WD", $"#WS", msacsr=%u: PASS\n", msacsr); \
+   else                                                                \
+      printf(instruction" $"#WD", $"#WS", msacsr=%u: FAIL\n", msacsr); \
+}
 
 #define TEST_MSA_FPU_REG32(WS)                                         \
 {                                                                      \
@@ -10850,70 +10961,6 @@ int main(int argc, char **argv) {
       TEST_2RF("frcp.d",  datad, 144, w29, w11);
       TEST_2RF("frcp.d",  datad,   0, w30, w30);
       TEST_2RF("frcp.d",  datad,  16, w31, w22);
-      TEST_2RF("frsqrt.w",  dataf,   0, w0,  w10);
-      TEST_2RF("frsqrt.w",  dataf,   8, w1,  w20);
-      TEST_2RF("frsqrt.w",  dataf,  16, w2,  w26);
-      TEST_2RF("frsqrt.w",  dataf,  24, w3,  w12);
-      TEST_2RF("frsqrt.w",  dataf,  32, w4,  w0);
-      TEST_2RF("frsqrt.w",  dataf,  40, w5,  w22);
-      TEST_2RF("frsqrt.w",  dataf,  48, w6,  w26);
-      TEST_2RF("frsqrt.w",  dataf,  56, w7,  w14);
-      TEST_2RF("frsqrt.w",  dataf,  64, w8,  w8);
-      TEST_2RF("frsqrt.w",  dataf,  72, w9,  w17);
-      TEST_2RF("frsqrt.w",  dataf,   0, w10, w28);
-      TEST_2RF("frsqrt.w",  dataf,   8, w11, w8);
-      TEST_2RF("frsqrt.w",  dataf,  16, w12, w16);
-      TEST_2RF("frsqrt.w",  dataf,  24, w13, w9);
-      TEST_2RF("frsqrt.w",  dataf,  32, w14, w3);
-      TEST_2RF("frsqrt.w",  dataf,  40, w15, w21);
-      TEST_2RF("frsqrt.w",  dataf,  48, w16, w9);
-      TEST_2RF("frsqrt.w",  dataf,  56, w17, w14);
-      TEST_2RF("frsqrt.w",  dataf,  64, w18, w10);
-      TEST_2RF("frsqrt.w",  dataf,  72, w19, w17);
-      TEST_2RF("frsqrt.w",  dataf,   0, w20, w25);
-      TEST_2RF("frsqrt.w",  dataf,   8, w21, w7);
-      TEST_2RF("frsqrt.w",  dataf,  16, w22, w26);
-      TEST_2RF("frsqrt.w",  dataf,  24, w23, w28);
-      TEST_2RF("frsqrt.w",  dataf,  32, w24, w4);
-      TEST_2RF("frsqrt.w",  dataf,  40, w25, w8);
-      TEST_2RF("frsqrt.w",  dataf,  48, w26, w1);
-      TEST_2RF("frsqrt.w",  dataf,  56, w27, w13);
-      TEST_2RF("frsqrt.w",  dataf,  64, w28, w14);
-      TEST_2RF("frsqrt.w",  dataf,  72, w29, w12);
-      TEST_2RF("frsqrt.w",  dataf,   0, w30, w30);
-      TEST_2RF("frsqrt.w",  dataf,   8, w31, w17);
-      TEST_2RF("frsqrt.d",  datad,   0, w0,  w2);
-      TEST_2RF("frsqrt.d",  datad,  16, w1,  w14);
-      TEST_2RF("frsqrt.d",  datad,  32, w2,  w24);
-      TEST_2RF("frsqrt.d",  datad,  48, w3,  w20);
-      TEST_2RF("frsqrt.d",  datad,  64, w4,  w25);
-      TEST_2RF("frsqrt.d",  datad,  80, w5,  w0);
-      TEST_2RF("frsqrt.d",  datad,  96, w6,  w26);
-      TEST_2RF("frsqrt.d",  datad, 112, w7,  w26);
-      TEST_2RF("frsqrt.d",  datad, 128, w8,  w8);
-      TEST_2RF("frsqrt.d",  datad, 144, w9,  w19);
-      TEST_2RF("frsqrt.d",  datad,   0, w10, w27);
-      TEST_2RF("frsqrt.d",  datad,  16, w11, w8);
-      TEST_2RF("frsqrt.d",  datad,  32, w12, w2);
-      TEST_2RF("frsqrt.d",  datad,  48, w13, w31);
-      TEST_2RF("frsqrt.d",  datad,  64, w14, w0);
-      TEST_2RF("frsqrt.d",  datad,  80, w15, w30);
-      TEST_2RF("frsqrt.d",  datad,  96, w16, w5);
-      TEST_2RF("frsqrt.d",  datad, 112, w17, w3);
-      TEST_2RF("frsqrt.d",  datad, 128, w18, w7);
-      TEST_2RF("frsqrt.d",  datad, 144, w19, w3);
-      TEST_2RF("frsqrt.d",  datad,   0, w20, w30);
-      TEST_2RF("frsqrt.d",  datad,  16, w21, w27);
-      TEST_2RF("frsqrt.d",  datad,  32, w22, w26);
-      TEST_2RF("frsqrt.d",  datad,  48, w23, w20);
-      TEST_2RF("frsqrt.d",  datad,  64, w24, w7);
-      TEST_2RF("frsqrt.d",  datad,  80, w25, w10);
-      TEST_2RF("frsqrt.d",  datad,  96, w26, w29);
-      TEST_2RF("frsqrt.d",  datad, 112, w27, w20);
-      TEST_2RF("frsqrt.d",  datad, 128, w28, w6);
-      TEST_2RF("frsqrt.d",  datad, 144, w29, w24);
-      TEST_2RF("frsqrt.d",  datad,   0, w30, w30);
-      TEST_2RF("frsqrt.d",  datad,  16, w31, w6);
       TEST_2RF("fsqrt.w",  dataf,   0, w0,  w17);
       TEST_2RF("fsqrt.w",  dataf,   8, w1,  w14);
       TEST_2RF("fsqrt.w",  dataf,  16, w2,  w8);
@@ -11492,6 +11539,272 @@ int main(int argc, char **argv) {
       TEST_2RF("ffqr.d",  dataf,   8, w31, w28);
    }
 
+   // Duplicated for each of the rounding modes
+   msacsr = 0;
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w0,  w10, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w1,  w20, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w2,  w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w3,  w12, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w4,   w0, 0x5f21e89b7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w5,  w22, 0x3bd77f463f741620, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w6,  w26, 0x000000007fc00000, 0x3bd77f463f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w7,  w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w8,   w8, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w9,  w17, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w10, w28, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w11,  w8, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w12, w16, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w13,  w9, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w14,  w3, 0x5f21e89b7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w15, w21, 0x3bd77f463f741620, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w16,  w9, 0x000000007fc00000, 0x3bd77f463f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w17, w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w18, w10, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w19, w17, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w20, w25, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w21,  w7, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w22, w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w23, w28, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w24,  w4, 0x5f21e89b7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w25,  w8, 0x3bd77f463f741620, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w26,  w1, 0x000000007fc00000, 0x3bd77f463f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w27, w13, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w28, w14, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w29, w12, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w30, w30, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w31, w17, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w0,   w2, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w1,  w14, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w2,  w24, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w3,  w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w4,  w25, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w5,   w0, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w6,  w26, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w7,  w26, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w8,   w8, 0x3f733bbfdc427cac, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w9,  w19, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w10, w27, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w11,  w8, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w12,  w2, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w13, w31, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w14,  w0, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w15, w30, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w16,  w5, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w17,  w3, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w18,  w7, 0x3f733bbfdc427cac, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w19,  w3, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w20, w30, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w21, w27, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w22, w26, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w23, w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w24,  w7, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w25, w10, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w26, w29, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w27, w20, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w28,  w6, 0x3f733bbfdc427cac, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w29, w24, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w30, w30, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w31,  w6, 0x7ff8000000000000, 0x7ff8000000000000);
+
+   msacsr = 1;
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w0,  w10, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w1,  w20, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w2,  w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w3,  w12, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w4,   w0, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w5,  w22, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w6,  w26, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w7,  w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w8,   w8, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w9,  w17, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w10, w28, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w11,  w8, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w12, w16, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w13,  w9, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w14,  w3, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w15, w21, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w16,  w9, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w17, w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w18, w10, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w19, w17, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w20, w25, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w21,  w7, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w22, w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w23, w28, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w24,  w4, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w25,  w8, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w26,  w1, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w27, w13, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w28, w14, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w29, w12, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w30, w30, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w31, w17, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w0,   w2, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w1,  w14, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w2,  w24, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w3,  w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w4,  w25, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w5,   w0, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w6,  w26, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w7,  w26, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w8,   w8, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w9,  w19, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w10, w27, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w11,  w8, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w12,  w2, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w13, w31, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w14,  w0, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w15, w30, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w16,  w5, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w17,  w3, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w18,  w7, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w19,  w3, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w20, w30, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w21, w27, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w22, w26, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w23, w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w24,  w7, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w25, w10, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w26, w29, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w27, w20, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w28,  w6, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w29, w24, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w30, w30, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w31,  w6, 0x7ff8000000000000, 0x7ff8000000000000);
+
+   msacsr = 2;
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w0,  w10, 0x7fc000007fc00000, 0x7fc000003fb504f4);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w1,  w20, 0x7fc000003d1abca6, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w2,  w26, 0xff8000007fc00000, 0x7fc000003d1abca6);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w3,  w12, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w4,   w0, 0x5f21e89c7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w5,  w22, 0x3bd77f473f741620, 0x5f21e89c7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w6,  w26, 0x000000007fc00000, 0x3bd77f473f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w7,  w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w8,   w8, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w9,  w17, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w10, w28, 0x7fc000007fc00000, 0x7fc000003fb504f4);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w11,  w8, 0x7fc000003d1abca6, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w12, w16, 0xff8000007fc00000, 0x7fc000003d1abca6);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w13,  w9, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w14,  w3, 0x5f21e89c7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w15, w21, 0x3bd77f473f741620, 0x5f21e89c7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w16,  w9, 0x000000007fc00000, 0x3bd77f473f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w17, w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w18, w10, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w19, w17, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w20, w25, 0x7fc000007fc00000, 0x7fc000003fb504f4);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w21,  w7, 0x7fc000003d1abca6, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w22, w26, 0xff8000007fc00000, 0x7fc000003d1abca6);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w23, w28, 0x7f8000003d44c9f8, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w24,  w4, 0x5f21e89c7fc00000, 0x7f8000003d44c9f8);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w25,  w8, 0x3bd77f473f741620, 0x5f21e89c7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w26,  w1, 0x000000007fc00000, 0x3bd77f473f741620);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w27, w13, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w28, w14, 0x3d2aaaab3c7349e0, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w29, w12, 0x3d2aaaab3d2aaaab, 0x3d2aaaab3c7349e0);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w30, w30, 0x7fc000007fc00000, 0x7fc000003fb504f4);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w31, w17, 0x7fc000003d1abca6, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w0,   w2, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w1,  w14, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w2,  w24, 0x3fa35794ad44f3ef, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w3,  w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w4,  w25, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w5,   w0, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w6,  w26, 0x3fee82c3f9d89e1c, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w7,  w26, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w8,   w8, 0x3f733bbfdc427cac, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w9,  w19, 0x3fa5555555555556, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w10, w27, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w11,  w8, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w12,  w2, 0x3fa35794ad44f3ef, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w13, w31, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w14,  w0, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w15, w30, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w16,  w5, 0x3fee82c3f9d89e1c, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w17,  w3, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w18,  w7, 0x3f733bbfdc427cac, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w19,  w3, 0x3fa5555555555556, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w20, w30, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w21, w27, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w22, w26, 0x3fa35794ad44f3ef, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w23, w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w24,  w7, 0x3fa8993eff4a591f, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w25, w10, 0x7ff8000000000000, 0x604a20bd700c2c3e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w26, w29, 0x3fee82c3f9d89e1c, 0x3f458a24b20e5b9e);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w27, w20, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w28,  w6, 0x3f733bbfdc427cac, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w29, w24, 0x3fa5555555555556, 0x3fa5555555555556);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w30, w30, 0x3ff6a09e667f3bcd, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w31,  w6, 0x7ff8000000000000, 0x7ff8000000000000);
+
+   msacsr = 3;
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w0,  w10, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w1,  w20, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w2,  w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w3,  w12, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w4,   w0, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w5,  w22, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w6,  w26, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w7,  w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w8,   w8, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w9,  w17, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w10, w28, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w11,  w8, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w12, w16, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w13,  w9, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w14,  w3, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w15, w21, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w16,  w9, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w17, w14, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w18, w10, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w19, w17, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w20, w25, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w21,  w7, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  16, w22, w26, 0xff8000007fc00000, 0x7fc000003d1abca5);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  24, w23, w28, 0x7f8000003d44c9f7, 0xff8000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  32, w24,  w4, 0x5f21e89b7fc00000, 0x7f8000003d44c9f7);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  40, w25,  w8, 0x3bd77f463f74161f, 0x5f21e89b7fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  48, w26,  w1, 0x000000007fc00000, 0x3bd77f463f74161f);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  56, w27, w13, 0x7fc000007fc00000, 0x000000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  64, w28, w14, 0x3d2aaaaa3c7349df, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,  72, w29, w12, 0x3d2aaaaa3d2aaaaa, 0x3d2aaaaa3c7349df);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   0, w30, w30, 0x7fc000007fc00000, 0x7fc000003fb504f3);
+   TEST_2RF_FRSQRT_W("frsqrt.w",  dataf,   8, w31, w17, 0x7fc000003d1abca5, 0x7fc000007fc00000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w0,   w2, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w1,  w14, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w2,  w24, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w3,  w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w4,  w25, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w5,   w0, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w6,  w26, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w7,  w26, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w8,   w8, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w9,  w19, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w10, w27, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w11,  w8, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w12,  w2, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w13, w31, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w14,  w0, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w15, w30, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w16,  w5, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w17,  w3, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w18,  w7, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w19,  w3, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w20, w30, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w21, w27, 0x7ff8000000000000, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  32, w22, w26, 0x3fa35794ad44f3ee, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  48, w23, w20, 0x7ff8000000000000, 0xfff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  64, w24,  w7, 0x3fa8993eff4a591e, 0x7ff0000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  80, w25, w10, 0x7ff8000000000000, 0x604a20bd700c2c3d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  96, w26, w29, 0x3fee82c3f9d89e1b, 0x3f458a24b20e5b9d);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 112, w27, w20, 0x7ff8000000000000, 0x0000000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 128, w28,  w6, 0x3f733bbfdc427cab, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad, 144, w29, w24, 0x3fa5555555555555, 0x3fa5555555555555);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,   0, w30, w30, 0x3ff6a09e667f3bcc, 0x7ff8000000000000);
+   TEST_2RF_FRSQRT_D("frsqrt.d",  datad,  16, w31,  w6, 0x7ff8000000000000, 0x7ff8000000000000);
+
+
    // Registers ovelapping tests.
 
    TEST_MSA_FPU_REG32(0);
index 953f79b0233c175d76b2afc476fd6394c43a4c2a..e45ed7471aefc7839a673ce1c8aec92122467b26 100644 (file)
@@ -10618,70 +10618,6 @@ frcp.d $w28, $w6, w28: 3ef71ec6cb12f8fb3f5c71c71c71c71c  w6: 40e6252666666666408
 frcp.d $w29, $w11, w29: 3f5c71c71c71c71c3f5c71c71c71c71c  w11: 40820000000000004082000000000000 msacsr 00000000
 frcp.d $w30, $w30, w30: 40000000000000008000000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000000
 frcp.d $w31, $w22, w31: bfd81fa673fc86b5bbffffffc0000080  w22: c005395810624dd3c3e0000020000000 msacsr 00000000
-frsqrt.w $w0, $w10, w0: 7fc000007fc000007fc000003fb504f3  w10: cf000001c029cac1ff8000003f000000 msacsr 00000000
-frsqrt.w $w1, $w20, w1: 7fc000003d1abca57fc000007fc00000  w20: 80500000442f2ccdcf000001c029cac1 msacsr 00000000
-frsqrt.w $w2, $w26, w2: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000000
-frsqrt.w $w3, $w12, w3: 7f8000003d44c9f8ff8000007fc00000  w12: 0000000043d89d7180000000c447c7ae msacsr 00000000
-frsqrt.w $w4, $w0, w4: 5f21e89b7fc000007f8000003d44c9f8  w0: 00500000bf3333330000000043d89d71 msacsr 00000000
-frsqrt.w $w5, $w22, w5: 3bd77f463f7416205f21e89b7fc00000  w22: 46b4a3143f8ccccd00500000bf333333 msacsr 00000000
-frsqrt.w $w6, $w26, w6: 000000007fc000003bd77f463f741620  w26: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000000
-frsqrt.w $w7, $w14, w7: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000000
-frsqrt.w $w8, $w8, w8: 3d2aaaab3c7349e07fc000007fc00000  w8: 44100000458db99ac029cac1c791bfa9 msacsr 00000000
-frsqrt.w $w9, $w17, w9: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w17: 441000004410000044100000458db99a msacsr 00000000
-frsqrt.w $w10, $w28, w10: 7fc000007fc000007fc000003fb504f3  w28: cf000001c029cac1ff8000003f000000 msacsr 00000000
-frsqrt.w $w11, $w8, w11: 7fc000003d1abca57fc000007fc00000  w8: 80500000442f2ccdcf000001c029cac1 msacsr 00000000
-frsqrt.w $w12, $w16, w12: ff8000007fc000007fc000003d1abca5  w16: 80000000c447c7ae80500000442f2ccd msacsr 00000000
-frsqrt.w $w13, $w9, w13: 7f8000003d44c9f8ff8000007fc00000  w9: 0000000043d89d7180000000c447c7ae msacsr 00000000
-frsqrt.w $w14, $w3, w14: 5f21e89b7fc000007f8000003d44c9f8  w3: 00500000bf3333330000000043d89d71 msacsr 00000000
-frsqrt.w $w15, $w21, w15: 3bd77f463f7416205f21e89b7fc00000  w21: 46b4a3143f8ccccd00500000bf333333 msacsr 00000000
-frsqrt.w $w16, $w9, w16: 000000007fc000003bd77f463f741620  w9: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000000
-frsqrt.w $w17, $w14, w17: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000000
-frsqrt.w $w18, $w10, w18: 3d2aaaab3c7349e07fc000007fc00000  w10: 44100000458db99ac029cac1c791bfa9 msacsr 00000000
-frsqrt.w $w19, $w17, w19: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w17: 441000004410000044100000458db99a msacsr 00000000
-frsqrt.w $w20, $w25, w20: 7fc000007fc000007fc000003fb504f3  w25: cf000001c029cac1ff8000003f000000 msacsr 00000000
-frsqrt.w $w21, $w7, w21: 7fc000003d1abca57fc000007fc00000  w7: 80500000442f2ccdcf000001c029cac1 msacsr 00000000
-frsqrt.w $w22, $w26, w22: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000000
-frsqrt.w $w23, $w28, w23: 7f8000003d44c9f8ff8000007fc00000  w28: 0000000043d89d7180000000c447c7ae msacsr 00000000
-frsqrt.w $w24, $w4, w24: 5f21e89b7fc000007f8000003d44c9f8  w4: 00500000bf3333330000000043d89d71 msacsr 00000000
-frsqrt.w $w25, $w8, w25: 3bd77f463f7416205f21e89b7fc00000  w8: 46b4a3143f8ccccd00500000bf333333 msacsr 00000000
-frsqrt.w $w26, $w1, w26: 000000007fc000003bd77f463f741620  w1: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000000
-frsqrt.w $w27, $w13, w27: 7fc000007fc00000000000007fc00000  w13: c029cac1c791bfa97f800000c70dabb3 msacsr 00000000
-frsqrt.w $w28, $w14, w28: 3d2aaaab3c7349e07fc000007fc00000  w14: 44100000458db99ac029cac1c791bfa9 msacsr 00000000
-frsqrt.w $w29, $w12, w29: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w12: 441000004410000044100000458db99a msacsr 00000000
-frsqrt.w $w30, $w30, w30: 7fc000007fc000007fc000003fb504f3  w30: cf000001c029cac1ff8000003f000000 msacsr 00000000
-frsqrt.w $w31, $w17, w31: 7fc000003d1abca57fc000007fc00000  w17: 80500000442f2ccdcf000001c029cac1 msacsr 00000000
-frsqrt.d $w0, $w2, w0: 3ff6a09e667f3bcd7ff8000000000000  w2: 3fe0000000000000fff0000000000000 msacsr 00000000
-frsqrt.d $w1, $w14, w1: 7ff80000000000007ff8000000000000  w14: c005395810624dd3c3e0000020000000 msacsr 00000000
-frsqrt.d $w2, $w24, w2: 3fa35794ad44f3ee7ff8000000000000  w24: 4085e5999999999a8000006000000000 msacsr 00000000
-frsqrt.d $w3, $w20, w3: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000000
-frsqrt.d $w4, $w25, w4: 3fa8993eff4a591f7ff0000000000000  w25: 407b13ae147ae1480000000000000000 msacsr 00000000
-frsqrt.d $w5, $w0, w5: 7ff8000000000000604a20bd700c2c3e  w0: bfe66666666666660000006000000000 msacsr 00000000
-frsqrt.d $w6, $w26, w6: 3fee82c3f9d89e1b3f458a24b20e5b9e  w26: 3ff199999999999a4141a828c51eb852 msacsr 00000000
-frsqrt.d $w7, $w26, w7: 7ff80000000000000000000000000000  w26: c1b59e0837b333337ff0000000000000 msacsr 00000000
-frsqrt.d $w8, $w8, w8: 3f733bbfdc427cac3fa5555555555555  w8: 40e62526666666664082000000000000 msacsr 00000000
-frsqrt.d $w9, $w19, w9: 3fa55555555555553fa5555555555555  w19: 40820000000000004082000000000000 msacsr 00000000
-frsqrt.d $w10, $w27, w10: 3ff6a09e667f3bcd7ff8000000000000  w27: 3fe0000000000000fff0000000000000 msacsr 00000000
-frsqrt.d $w11, $w8, w11: 7ff80000000000007ff8000000000000  w8: c005395810624dd3c3e0000020000000 msacsr 00000000
-frsqrt.d $w12, $w2, w12: 3fa35794ad44f3ee7ff8000000000000  w2: 4085e5999999999a8000006000000000 msacsr 00000000
-frsqrt.d $w13, $w31, w13: 7ff8000000000000fff0000000000000  w31: c088f8f5c28f5c298000000000000000 msacsr 00000000
-frsqrt.d $w14, $w0, w14: 3fa8993eff4a591f7ff0000000000000  w0: 407b13ae147ae1480000000000000000 msacsr 00000000
-frsqrt.d $w15, $w30, w15: 7ff8000000000000604a20bd700c2c3e  w30: bfe66666666666660000006000000000 msacsr 00000000
-frsqrt.d $w16, $w5, w16: 3fee82c3f9d89e1b3f458a24b20e5b9e  w5: 3ff199999999999a4141a828c51eb852 msacsr 00000000
-frsqrt.d $w17, $w3, w17: 7ff80000000000000000000000000000  w3: c1b59e0837b333337ff0000000000000 msacsr 00000000
-frsqrt.d $w18, $w7, w18: 3f733bbfdc427cac3fa5555555555555  w7: 40e62526666666664082000000000000 msacsr 00000000
-frsqrt.d $w19, $w3, w19: 3fa55555555555553fa5555555555555  w3: 40820000000000004082000000000000 msacsr 00000000
-frsqrt.d $w20, $w30, w20: 3ff6a09e667f3bcd7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000000
-frsqrt.d $w21, $w27, w21: 7ff80000000000007ff8000000000000  w27: c005395810624dd3c3e0000020000000 msacsr 00000000
-frsqrt.d $w22, $w26, w22: 3fa35794ad44f3ee7ff8000000000000  w26: 4085e5999999999a8000006000000000 msacsr 00000000
-frsqrt.d $w23, $w20, w23: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000000
-frsqrt.d $w24, $w7, w24: 3fa8993eff4a591f7ff0000000000000  w7: 407b13ae147ae1480000000000000000 msacsr 00000000
-frsqrt.d $w25, $w10, w25: 7ff8000000000000604a20bd700c2c3e  w10: bfe66666666666660000006000000000 msacsr 00000000
-frsqrt.d $w26, $w29, w26: 3fee82c3f9d89e1b3f458a24b20e5b9e  w29: 3ff199999999999a4141a828c51eb852 msacsr 00000000
-frsqrt.d $w27, $w20, w27: 7ff80000000000000000000000000000  w20: c1b59e0837b333337ff0000000000000 msacsr 00000000
-frsqrt.d $w28, $w6, w28: 3f733bbfdc427cac3fa5555555555555  w6: 40e62526666666664082000000000000 msacsr 00000000
-frsqrt.d $w29, $w24, w29: 3fa55555555555553fa5555555555555  w24: 40820000000000004082000000000000 msacsr 00000000
-frsqrt.d $w30, $w30, w30: 3ff6a09e667f3bcd7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000000
-frsqrt.d $w31, $w6, w31: 7ff80000000000007ff8000000000000  w6: c005395810624dd3c3e0000020000000 msacsr 00000000
 fsqrt.w $w0, $w17, w0: 7fc000007fc000007fc000003f3504f3  w17: cf000001c029cac1ff8000003f000000 msacsr 00000000
 fsqrt.w $w1, $w14, w1: 7fc0000041d3c4137fc000007fc00000  w14: 80500000442f2ccdcf000001c029cac1 msacsr 00000000
 fsqrt.w $w2, $w8, w2: 800000007fc000007fc0000041d3c413  w8: 80000000c447c7ae80500000442f2ccd msacsr 00000000
@@ -16614,70 +16550,6 @@ frcp.d $w28, $w6, w28: 3ef71ec6cb12f8fb3f5c71c71c71c71c  w6: 40e6252666666666408
 frcp.d $w29, $w11, w29: 3f5c71c71c71c71c3f5c71c71c71c71c  w11: 40820000000000004082000000000000 msacsr 00000001
 frcp.d $w30, $w30, w30: 40000000000000008000000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000001
 frcp.d $w31, $w22, w31: bfd81fa673fc86b4bbffffffc000007f  w22: c005395810624dd3c3e0000020000000 msacsr 00000001
-frsqrt.w $w0, $w10, w0: 7fc000007fc000007fc000003fb504f3  w10: cf000001c029cac1ff8000003f000000 msacsr 00000001
-frsqrt.w $w1, $w20, w1: 7fc000003d1abca57fc000007fc00000  w20: 80500000442f2ccdcf000001c029cac1 msacsr 00000001
-frsqrt.w $w2, $w26, w2: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000001
-frsqrt.w $w3, $w12, w3: 7f8000003d44c9f7ff8000007fc00000  w12: 0000000043d89d7180000000c447c7ae msacsr 00000001
-frsqrt.w $w4, $w0, w4: 5f21e89b7fc000007f8000003d44c9f7  w0: 00500000bf3333330000000043d89d71 msacsr 00000001
-frsqrt.w $w5, $w22, w5: 3bd77f463f74161f5f21e89b7fc00000  w22: 46b4a3143f8ccccd00500000bf333333 msacsr 00000001
-frsqrt.w $w6, $w26, w6: 000000007fc000003bd77f463f74161f  w26: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000001
-frsqrt.w $w7, $w14, w7: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000001
-frsqrt.w $w8, $w8, w8: 3d2aaaaa3c7349df7fc000007fc00000  w8: 44100000458db99ac029cac1c791bfa9 msacsr 00000001
-frsqrt.w $w9, $w17, w9: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w17: 441000004410000044100000458db99a msacsr 00000001
-frsqrt.w $w10, $w28, w10: 7fc000007fc000007fc000003fb504f3  w28: cf000001c029cac1ff8000003f000000 msacsr 00000001
-frsqrt.w $w11, $w8, w11: 7fc000003d1abca57fc000007fc00000  w8: 80500000442f2ccdcf000001c029cac1 msacsr 00000001
-frsqrt.w $w12, $w16, w12: ff8000007fc000007fc000003d1abca5  w16: 80000000c447c7ae80500000442f2ccd msacsr 00000001
-frsqrt.w $w13, $w9, w13: 7f8000003d44c9f7ff8000007fc00000  w9: 0000000043d89d7180000000c447c7ae msacsr 00000001
-frsqrt.w $w14, $w3, w14: 5f21e89b7fc000007f8000003d44c9f7  w3: 00500000bf3333330000000043d89d71 msacsr 00000001
-frsqrt.w $w15, $w21, w15: 3bd77f463f74161f5f21e89b7fc00000  w21: 46b4a3143f8ccccd00500000bf333333 msacsr 00000001
-frsqrt.w $w16, $w9, w16: 000000007fc000003bd77f463f74161f  w9: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000001
-frsqrt.w $w17, $w14, w17: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000001
-frsqrt.w $w18, $w10, w18: 3d2aaaaa3c7349df7fc000007fc00000  w10: 44100000458db99ac029cac1c791bfa9 msacsr 00000001
-frsqrt.w $w19, $w17, w19: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w17: 441000004410000044100000458db99a msacsr 00000001
-frsqrt.w $w20, $w25, w20: 7fc000007fc000007fc000003fb504f3  w25: cf000001c029cac1ff8000003f000000 msacsr 00000001
-frsqrt.w $w21, $w7, w21: 7fc000003d1abca57fc000007fc00000  w7: 80500000442f2ccdcf000001c029cac1 msacsr 00000001
-frsqrt.w $w22, $w26, w22: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000001
-frsqrt.w $w23, $w28, w23: 7f8000003d44c9f7ff8000007fc00000  w28: 0000000043d89d7180000000c447c7ae msacsr 00000001
-frsqrt.w $w24, $w4, w24: 5f21e89b7fc000007f8000003d44c9f7  w4: 00500000bf3333330000000043d89d71 msacsr 00000001
-frsqrt.w $w25, $w8, w25: 3bd77f463f74161f5f21e89b7fc00000  w8: 46b4a3143f8ccccd00500000bf333333 msacsr 00000001
-frsqrt.w $w26, $w1, w26: 000000007fc000003bd77f463f74161f  w1: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000001
-frsqrt.w $w27, $w13, w27: 7fc000007fc00000000000007fc00000  w13: c029cac1c791bfa97f800000c70dabb3 msacsr 00000001
-frsqrt.w $w28, $w14, w28: 3d2aaaaa3c7349df7fc000007fc00000  w14: 44100000458db99ac029cac1c791bfa9 msacsr 00000001
-frsqrt.w $w29, $w12, w29: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w12: 441000004410000044100000458db99a msacsr 00000001
-frsqrt.w $w30, $w30, w30: 7fc000007fc000007fc000003fb504f3  w30: cf000001c029cac1ff8000003f000000 msacsr 00000001
-frsqrt.w $w31, $w17, w31: 7fc000003d1abca57fc000007fc00000  w17: 80500000442f2ccdcf000001c029cac1 msacsr 00000001
-frsqrt.d $w0, $w2, w0: 3ff6a09e667f3bcc7ff8000000000000  w2: 3fe0000000000000fff0000000000000 msacsr 00000001
-frsqrt.d $w1, $w14, w1: 7ff80000000000007ff8000000000000  w14: c005395810624dd3c3e0000020000000 msacsr 00000001
-frsqrt.d $w2, $w24, w2: 3fa35794ad44f3ee7ff8000000000000  w24: 4085e5999999999a8000006000000000 msacsr 00000001
-frsqrt.d $w3, $w20, w3: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000001
-frsqrt.d $w4, $w25, w4: 3fa8993eff4a591e7ff0000000000000  w25: 407b13ae147ae1480000000000000000 msacsr 00000001
-frsqrt.d $w5, $w0, w5: 7ff8000000000000604a20bd700c2c3d  w0: bfe66666666666660000006000000000 msacsr 00000001
-frsqrt.d $w6, $w26, w6: 3fee82c3f9d89e1b3f458a24b20e5b9d  w26: 3ff199999999999a4141a828c51eb852 msacsr 00000001
-frsqrt.d $w7, $w26, w7: 7ff80000000000000000000000000000  w26: c1b59e0837b333337ff0000000000000 msacsr 00000001
-frsqrt.d $w8, $w8, w8: 3f733bbfdc427cab3fa5555555555555  w8: 40e62526666666664082000000000000 msacsr 00000001
-frsqrt.d $w9, $w19, w9: 3fa55555555555553fa5555555555555  w19: 40820000000000004082000000000000 msacsr 00000001
-frsqrt.d $w10, $w27, w10: 3ff6a09e667f3bcc7ff8000000000000  w27: 3fe0000000000000fff0000000000000 msacsr 00000001
-frsqrt.d $w11, $w8, w11: 7ff80000000000007ff8000000000000  w8: c005395810624dd3c3e0000020000000 msacsr 00000001
-frsqrt.d $w12, $w2, w12: 3fa35794ad44f3ee7ff8000000000000  w2: 4085e5999999999a8000006000000000 msacsr 00000001
-frsqrt.d $w13, $w31, w13: 7ff8000000000000fff0000000000000  w31: c088f8f5c28f5c298000000000000000 msacsr 00000001
-frsqrt.d $w14, $w0, w14: 3fa8993eff4a591e7ff0000000000000  w0: 407b13ae147ae1480000000000000000 msacsr 00000001
-frsqrt.d $w15, $w30, w15: 7ff8000000000000604a20bd700c2c3d  w30: bfe66666666666660000006000000000 msacsr 00000001
-frsqrt.d $w16, $w5, w16: 3fee82c3f9d89e1b3f458a24b20e5b9d  w5: 3ff199999999999a4141a828c51eb852 msacsr 00000001
-frsqrt.d $w17, $w3, w17: 7ff80000000000000000000000000000  w3: c1b59e0837b333337ff0000000000000 msacsr 00000001
-frsqrt.d $w18, $w7, w18: 3f733bbfdc427cab3fa5555555555555  w7: 40e62526666666664082000000000000 msacsr 00000001
-frsqrt.d $w19, $w3, w19: 3fa55555555555553fa5555555555555  w3: 40820000000000004082000000000000 msacsr 00000001
-frsqrt.d $w20, $w30, w20: 3ff6a09e667f3bcc7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000001
-frsqrt.d $w21, $w27, w21: 7ff80000000000007ff8000000000000  w27: c005395810624dd3c3e0000020000000 msacsr 00000001
-frsqrt.d $w22, $w26, w22: 3fa35794ad44f3ee7ff8000000000000  w26: 4085e5999999999a8000006000000000 msacsr 00000001
-frsqrt.d $w23, $w20, w23: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000001
-frsqrt.d $w24, $w7, w24: 3fa8993eff4a591e7ff0000000000000  w7: 407b13ae147ae1480000000000000000 msacsr 00000001
-frsqrt.d $w25, $w10, w25: 7ff8000000000000604a20bd700c2c3d  w10: bfe66666666666660000006000000000 msacsr 00000001
-frsqrt.d $w26, $w29, w26: 3fee82c3f9d89e1b3f458a24b20e5b9d  w29: 3ff199999999999a4141a828c51eb852 msacsr 00000001
-frsqrt.d $w27, $w20, w27: 7ff80000000000000000000000000000  w20: c1b59e0837b333337ff0000000000000 msacsr 00000001
-frsqrt.d $w28, $w6, w28: 3f733bbfdc427cab3fa5555555555555  w6: 40e62526666666664082000000000000 msacsr 00000001
-frsqrt.d $w29, $w24, w29: 3fa55555555555553fa5555555555555  w24: 40820000000000004082000000000000 msacsr 00000001
-frsqrt.d $w30, $w30, w30: 3ff6a09e667f3bcc7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000001
-frsqrt.d $w31, $w6, w31: 7ff80000000000007ff8000000000000  w6: c005395810624dd3c3e0000020000000 msacsr 00000001
 fsqrt.w $w0, $w17, w0: 7fc000007fc000007fc000003f3504f3  w17: cf000001c029cac1ff8000003f000000 msacsr 00000001
 fsqrt.w $w1, $w14, w1: 7fc0000041d3c4127fc000007fc00000  w14: 80500000442f2ccdcf000001c029cac1 msacsr 00000001
 fsqrt.w $w2, $w8, w2: 800000007fc000007fc0000041d3c412  w8: 80000000c447c7ae80500000442f2ccd msacsr 00000001
@@ -22610,70 +22482,6 @@ frcp.d $w28, $w6, w28: 3ef71ec6cb12f8fc3f5c71c71c71c71d  w6: 40e6252666666666408
 frcp.d $w29, $w11, w29: 3f5c71c71c71c71d3f5c71c71c71c71d  w11: 40820000000000004082000000000000 msacsr 00000002
 frcp.d $w30, $w30, w30: 40000000000000008000000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000002
 frcp.d $w31, $w22, w31: bfd81fa673fc86b4bbffffffc000007f  w22: c005395810624dd3c3e0000020000000 msacsr 00000002
-frsqrt.w $w0, $w10, w0: 7fc000007fc000007fc000003fb504f4  w10: cf000001c029cac1ff8000003f000000 msacsr 00000002
-frsqrt.w $w1, $w20, w1: 7fc000003d1abca67fc000007fc00000  w20: 80500000442f2ccdcf000001c029cac1 msacsr 00000002
-frsqrt.w $w2, $w26, w2: ff8000007fc000007fc000003d1abca6  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000002
-frsqrt.w $w3, $w12, w3: 7f8000003d44c9f8ff8000007fc00000  w12: 0000000043d89d7180000000c447c7ae msacsr 00000002
-frsqrt.w $w4, $w0, w4: 5f21e89c7fc000007f8000003d44c9f8  w0: 00500000bf3333330000000043d89d71 msacsr 00000002
-frsqrt.w $w5, $w22, w5: 3bd77f473f7416205f21e89c7fc00000  w22: 46b4a3143f8ccccd00500000bf333333 msacsr 00000002
-frsqrt.w $w6, $w26, w6: 000000007fc000003bd77f473f741620  w26: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000002
-frsqrt.w $w7, $w14, w7: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000002
-frsqrt.w $w8, $w8, w8: 3d2aaaab3c7349e07fc000007fc00000  w8: 44100000458db99ac029cac1c791bfa9 msacsr 00000002
-frsqrt.w $w9, $w17, w9: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w17: 441000004410000044100000458db99a msacsr 00000002
-frsqrt.w $w10, $w28, w10: 7fc000007fc000007fc000003fb504f4  w28: cf000001c029cac1ff8000003f000000 msacsr 00000002
-frsqrt.w $w11, $w8, w11: 7fc000003d1abca67fc000007fc00000  w8: 80500000442f2ccdcf000001c029cac1 msacsr 00000002
-frsqrt.w $w12, $w16, w12: ff8000007fc000007fc000003d1abca6  w16: 80000000c447c7ae80500000442f2ccd msacsr 00000002
-frsqrt.w $w13, $w9, w13: 7f8000003d44c9f8ff8000007fc00000  w9: 0000000043d89d7180000000c447c7ae msacsr 00000002
-frsqrt.w $w14, $w3, w14: 5f21e89c7fc000007f8000003d44c9f8  w3: 00500000bf3333330000000043d89d71 msacsr 00000002
-frsqrt.w $w15, $w21, w15: 3bd77f473f7416205f21e89c7fc00000  w21: 46b4a3143f8ccccd00500000bf333333 msacsr 00000002
-frsqrt.w $w16, $w9, w16: 000000007fc000003bd77f473f741620  w9: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000002
-frsqrt.w $w17, $w14, w17: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000002
-frsqrt.w $w18, $w10, w18: 3d2aaaab3c7349e07fc000007fc00000  w10: 44100000458db99ac029cac1c791bfa9 msacsr 00000002
-frsqrt.w $w19, $w17, w19: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w17: 441000004410000044100000458db99a msacsr 00000002
-frsqrt.w $w20, $w25, w20: 7fc000007fc000007fc000003fb504f4  w25: cf000001c029cac1ff8000003f000000 msacsr 00000002
-frsqrt.w $w21, $w7, w21: 7fc000003d1abca67fc000007fc00000  w7: 80500000442f2ccdcf000001c029cac1 msacsr 00000002
-frsqrt.w $w22, $w26, w22: ff8000007fc000007fc000003d1abca6  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000002
-frsqrt.w $w23, $w28, w23: 7f8000003d44c9f8ff8000007fc00000  w28: 0000000043d89d7180000000c447c7ae msacsr 00000002
-frsqrt.w $w24, $w4, w24: 5f21e89c7fc000007f8000003d44c9f8  w4: 00500000bf3333330000000043d89d71 msacsr 00000002
-frsqrt.w $w25, $w8, w25: 3bd77f473f7416205f21e89c7fc00000  w8: 46b4a3143f8ccccd00500000bf333333 msacsr 00000002
-frsqrt.w $w26, $w1, w26: 000000007fc000003bd77f473f741620  w1: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000002
-frsqrt.w $w27, $w13, w27: 7fc000007fc00000000000007fc00000  w13: c029cac1c791bfa97f800000c70dabb3 msacsr 00000002
-frsqrt.w $w28, $w14, w28: 3d2aaaab3c7349e07fc000007fc00000  w14: 44100000458db99ac029cac1c791bfa9 msacsr 00000002
-frsqrt.w $w29, $w12, w29: 3d2aaaab3d2aaaab3d2aaaab3c7349e0  w12: 441000004410000044100000458db99a msacsr 00000002
-frsqrt.w $w30, $w30, w30: 7fc000007fc000007fc000003fb504f4  w30: cf000001c029cac1ff8000003f000000 msacsr 00000002
-frsqrt.w $w31, $w17, w31: 7fc000003d1abca67fc000007fc00000  w17: 80500000442f2ccdcf000001c029cac1 msacsr 00000002
-frsqrt.d $w0, $w2, w0: 3ff6a09e667f3bcd7ff8000000000000  w2: 3fe0000000000000fff0000000000000 msacsr 00000002
-frsqrt.d $w1, $w14, w1: 7ff80000000000007ff8000000000000  w14: c005395810624dd3c3e0000020000000 msacsr 00000002
-frsqrt.d $w2, $w24, w2: 3fa35794ad44f3ef7ff8000000000000  w24: 4085e5999999999a8000006000000000 msacsr 00000002
-frsqrt.d $w3, $w20, w3: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000002
-frsqrt.d $w4, $w25, w4: 3fa8993eff4a591f7ff0000000000000  w25: 407b13ae147ae1480000000000000000 msacsr 00000002
-frsqrt.d $w5, $w0, w5: 7ff8000000000000604a20bd700c2c3e  w0: bfe66666666666660000006000000000 msacsr 00000002
-frsqrt.d $w6, $w26, w6: 3fee82c3f9d89e1c3f458a24b20e5b9e  w26: 3ff199999999999a4141a828c51eb852 msacsr 00000002
-frsqrt.d $w7, $w26, w7: 7ff80000000000000000000000000000  w26: c1b59e0837b333337ff0000000000000 msacsr 00000002
-frsqrt.d $w8, $w8, w8: 3f733bbfdc427cac3fa5555555555556  w8: 40e62526666666664082000000000000 msacsr 00000002
-frsqrt.d $w9, $w19, w9: 3fa55555555555563fa5555555555556  w19: 40820000000000004082000000000000 msacsr 00000002
-frsqrt.d $w10, $w27, w10: 3ff6a09e667f3bcd7ff8000000000000  w27: 3fe0000000000000fff0000000000000 msacsr 00000002
-frsqrt.d $w11, $w8, w11: 7ff80000000000007ff8000000000000  w8: c005395810624dd3c3e0000020000000 msacsr 00000002
-frsqrt.d $w12, $w2, w12: 3fa35794ad44f3ef7ff8000000000000  w2: 4085e5999999999a8000006000000000 msacsr 00000002
-frsqrt.d $w13, $w31, w13: 7ff8000000000000fff0000000000000  w31: c088f8f5c28f5c298000000000000000 msacsr 00000002
-frsqrt.d $w14, $w0, w14: 3fa8993eff4a591f7ff0000000000000  w0: 407b13ae147ae1480000000000000000 msacsr 00000002
-frsqrt.d $w15, $w30, w15: 7ff8000000000000604a20bd700c2c3e  w30: bfe66666666666660000006000000000 msacsr 00000002
-frsqrt.d $w16, $w5, w16: 3fee82c3f9d89e1c3f458a24b20e5b9e  w5: 3ff199999999999a4141a828c51eb852 msacsr 00000002
-frsqrt.d $w17, $w3, w17: 7ff80000000000000000000000000000  w3: c1b59e0837b333337ff0000000000000 msacsr 00000002
-frsqrt.d $w18, $w7, w18: 3f733bbfdc427cac3fa5555555555556  w7: 40e62526666666664082000000000000 msacsr 00000002
-frsqrt.d $w19, $w3, w19: 3fa55555555555563fa5555555555556  w3: 40820000000000004082000000000000 msacsr 00000002
-frsqrt.d $w20, $w30, w20: 3ff6a09e667f3bcd7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000002
-frsqrt.d $w21, $w27, w21: 7ff80000000000007ff8000000000000  w27: c005395810624dd3c3e0000020000000 msacsr 00000002
-frsqrt.d $w22, $w26, w22: 3fa35794ad44f3ef7ff8000000000000  w26: 4085e5999999999a8000006000000000 msacsr 00000002
-frsqrt.d $w23, $w20, w23: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000002
-frsqrt.d $w24, $w7, w24: 3fa8993eff4a591f7ff0000000000000  w7: 407b13ae147ae1480000000000000000 msacsr 00000002
-frsqrt.d $w25, $w10, w25: 7ff8000000000000604a20bd700c2c3e  w10: bfe66666666666660000006000000000 msacsr 00000002
-frsqrt.d $w26, $w29, w26: 3fee82c3f9d89e1c3f458a24b20e5b9e  w29: 3ff199999999999a4141a828c51eb852 msacsr 00000002
-frsqrt.d $w27, $w20, w27: 7ff80000000000000000000000000000  w20: c1b59e0837b333337ff0000000000000 msacsr 00000002
-frsqrt.d $w28, $w6, w28: 3f733bbfdc427cac3fa5555555555556  w6: 40e62526666666664082000000000000 msacsr 00000002
-frsqrt.d $w29, $w24, w29: 3fa55555555555563fa5555555555556  w24: 40820000000000004082000000000000 msacsr 00000002
-frsqrt.d $w30, $w30, w30: 3ff6a09e667f3bcd7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000002
-frsqrt.d $w31, $w6, w31: 7ff80000000000007ff8000000000000  w6: c005395810624dd3c3e0000020000000 msacsr 00000002
 fsqrt.w $w0, $w17, w0: 7fc000007fc000007fc000003f3504f4  w17: cf000001c029cac1ff8000003f000000 msacsr 00000002
 fsqrt.w $w1, $w14, w1: 7fc0000041d3c4137fc000007fc00000  w14: 80500000442f2ccdcf000001c029cac1 msacsr 00000002
 fsqrt.w $w2, $w8, w2: 800000007fc000007fc0000041d3c413  w8: 80000000c447c7ae80500000442f2ccd msacsr 00000002
@@ -28606,70 +28414,6 @@ frcp.d $w28, $w6, w28: 3ef71ec6cb12f8fb3f5c71c71c71c71c  w6: 40e6252666666666408
 frcp.d $w29, $w11, w29: 3f5c71c71c71c71c3f5c71c71c71c71c  w11: 40820000000000004082000000000000 msacsr 00000003
 frcp.d $w30, $w30, w30: 40000000000000008000000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000003
 frcp.d $w31, $w22, w31: bfd81fa673fc86b5bbffffffc0000080  w22: c005395810624dd3c3e0000020000000 msacsr 00000003
-frsqrt.w $w0, $w10, w0: 7fc000007fc000007fc000003fb504f3  w10: cf000001c029cac1ff8000003f000000 msacsr 00000003
-frsqrt.w $w1, $w20, w1: 7fc000003d1abca57fc000007fc00000  w20: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
-frsqrt.w $w2, $w26, w2: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000003
-frsqrt.w $w3, $w12, w3: 7f8000003d44c9f7ff8000007fc00000  w12: 0000000043d89d7180000000c447c7ae msacsr 00000003
-frsqrt.w $w4, $w0, w4: 5f21e89b7fc000007f8000003d44c9f7  w0: 00500000bf3333330000000043d89d71 msacsr 00000003
-frsqrt.w $w5, $w22, w5: 3bd77f463f74161f5f21e89b7fc00000  w22: 46b4a3143f8ccccd00500000bf333333 msacsr 00000003
-frsqrt.w $w6, $w26, w6: 000000007fc000003bd77f463f74161f  w26: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000003
-frsqrt.w $w7, $w14, w7: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000003
-frsqrt.w $w8, $w8, w8: 3d2aaaaa3c7349df7fc000007fc00000  w8: 44100000458db99ac029cac1c791bfa9 msacsr 00000003
-frsqrt.w $w9, $w17, w9: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w17: 441000004410000044100000458db99a msacsr 00000003
-frsqrt.w $w10, $w28, w10: 7fc000007fc000007fc000003fb504f3  w28: cf000001c029cac1ff8000003f000000 msacsr 00000003
-frsqrt.w $w11, $w8, w11: 7fc000003d1abca57fc000007fc00000  w8: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
-frsqrt.w $w12, $w16, w12: ff8000007fc000007fc000003d1abca5  w16: 80000000c447c7ae80500000442f2ccd msacsr 00000003
-frsqrt.w $w13, $w9, w13: 7f8000003d44c9f7ff8000007fc00000  w9: 0000000043d89d7180000000c447c7ae msacsr 00000003
-frsqrt.w $w14, $w3, w14: 5f21e89b7fc000007f8000003d44c9f7  w3: 00500000bf3333330000000043d89d71 msacsr 00000003
-frsqrt.w $w15, $w21, w15: 3bd77f463f74161f5f21e89b7fc00000  w21: 46b4a3143f8ccccd00500000bf333333 msacsr 00000003
-frsqrt.w $w16, $w9, w16: 000000007fc000003bd77f463f74161f  w9: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000003
-frsqrt.w $w17, $w14, w17: 7fc000007fc00000000000007fc00000  w14: c029cac1c791bfa97f800000c70dabb3 msacsr 00000003
-frsqrt.w $w18, $w10, w18: 3d2aaaaa3c7349df7fc000007fc00000  w10: 44100000458db99ac029cac1c791bfa9 msacsr 00000003
-frsqrt.w $w19, $w17, w19: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w17: 441000004410000044100000458db99a msacsr 00000003
-frsqrt.w $w20, $w25, w20: 7fc000007fc000007fc000003fb504f3  w25: cf000001c029cac1ff8000003f000000 msacsr 00000003
-frsqrt.w $w21, $w7, w21: 7fc000003d1abca57fc000007fc00000  w7: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
-frsqrt.w $w22, $w26, w22: ff8000007fc000007fc000003d1abca5  w26: 80000000c447c7ae80500000442f2ccd msacsr 00000003
-frsqrt.w $w23, $w28, w23: 7f8000003d44c9f7ff8000007fc00000  w28: 0000000043d89d7180000000c447c7ae msacsr 00000003
-frsqrt.w $w24, $w4, w24: 5f21e89b7fc000007f8000003d44c9f7  w4: 00500000bf3333330000000043d89d71 msacsr 00000003
-frsqrt.w $w25, $w8, w25: 3bd77f463f74161f5f21e89b7fc00000  w8: 46b4a3143f8ccccd00500000bf333333 msacsr 00000003
-frsqrt.w $w26, $w1, w26: 000000007fc000003bd77f463f74161f  w1: 7f800000c70dabb346b4a3143f8ccccd msacsr 00000003
-frsqrt.w $w27, $w13, w27: 7fc000007fc00000000000007fc00000  w13: c029cac1c791bfa97f800000c70dabb3 msacsr 00000003
-frsqrt.w $w28, $w14, w28: 3d2aaaaa3c7349df7fc000007fc00000  w14: 44100000458db99ac029cac1c791bfa9 msacsr 00000003
-frsqrt.w $w29, $w12, w29: 3d2aaaaa3d2aaaaa3d2aaaaa3c7349df  w12: 441000004410000044100000458db99a msacsr 00000003
-frsqrt.w $w30, $w30, w30: 7fc000007fc000007fc000003fb504f3  w30: cf000001c029cac1ff8000003f000000 msacsr 00000003
-frsqrt.w $w31, $w17, w31: 7fc000003d1abca57fc000007fc00000  w17: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
-frsqrt.d $w0, $w2, w0: 3ff6a09e667f3bcc7ff8000000000000  w2: 3fe0000000000000fff0000000000000 msacsr 00000003
-frsqrt.d $w1, $w14, w1: 7ff80000000000007ff8000000000000  w14: c005395810624dd3c3e0000020000000 msacsr 00000003
-frsqrt.d $w2, $w24, w2: 3fa35794ad44f3ee7ff8000000000000  w24: 4085e5999999999a8000006000000000 msacsr 00000003
-frsqrt.d $w3, $w20, w3: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000003
-frsqrt.d $w4, $w25, w4: 3fa8993eff4a591e7ff0000000000000  w25: 407b13ae147ae1480000000000000000 msacsr 00000003
-frsqrt.d $w5, $w0, w5: 7ff8000000000000604a20bd700c2c3d  w0: bfe66666666666660000006000000000 msacsr 00000003
-frsqrt.d $w6, $w26, w6: 3fee82c3f9d89e1b3f458a24b20e5b9d  w26: 3ff199999999999a4141a828c51eb852 msacsr 00000003
-frsqrt.d $w7, $w26, w7: 7ff80000000000000000000000000000  w26: c1b59e0837b333337ff0000000000000 msacsr 00000003
-frsqrt.d $w8, $w8, w8: 3f733bbfdc427cab3fa5555555555555  w8: 40e62526666666664082000000000000 msacsr 00000003
-frsqrt.d $w9, $w19, w9: 3fa55555555555553fa5555555555555  w19: 40820000000000004082000000000000 msacsr 00000003
-frsqrt.d $w10, $w27, w10: 3ff6a09e667f3bcc7ff8000000000000  w27: 3fe0000000000000fff0000000000000 msacsr 00000003
-frsqrt.d $w11, $w8, w11: 7ff80000000000007ff8000000000000  w8: c005395810624dd3c3e0000020000000 msacsr 00000003
-frsqrt.d $w12, $w2, w12: 3fa35794ad44f3ee7ff8000000000000  w2: 4085e5999999999a8000006000000000 msacsr 00000003
-frsqrt.d $w13, $w31, w13: 7ff8000000000000fff0000000000000  w31: c088f8f5c28f5c298000000000000000 msacsr 00000003
-frsqrt.d $w14, $w0, w14: 3fa8993eff4a591e7ff0000000000000  w0: 407b13ae147ae1480000000000000000 msacsr 00000003
-frsqrt.d $w15, $w30, w15: 7ff8000000000000604a20bd700c2c3d  w30: bfe66666666666660000006000000000 msacsr 00000003
-frsqrt.d $w16, $w5, w16: 3fee82c3f9d89e1b3f458a24b20e5b9d  w5: 3ff199999999999a4141a828c51eb852 msacsr 00000003
-frsqrt.d $w17, $w3, w17: 7ff80000000000000000000000000000  w3: c1b59e0837b333337ff0000000000000 msacsr 00000003
-frsqrt.d $w18, $w7, w18: 3f733bbfdc427cab3fa5555555555555  w7: 40e62526666666664082000000000000 msacsr 00000003
-frsqrt.d $w19, $w3, w19: 3fa55555555555553fa5555555555555  w3: 40820000000000004082000000000000 msacsr 00000003
-frsqrt.d $w20, $w30, w20: 3ff6a09e667f3bcc7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000003
-frsqrt.d $w21, $w27, w21: 7ff80000000000007ff8000000000000  w27: c005395810624dd3c3e0000020000000 msacsr 00000003
-frsqrt.d $w22, $w26, w22: 3fa35794ad44f3ee7ff8000000000000  w26: 4085e5999999999a8000006000000000 msacsr 00000003
-frsqrt.d $w23, $w20, w23: 7ff8000000000000fff0000000000000  w20: c088f8f5c28f5c298000000000000000 msacsr 00000003
-frsqrt.d $w24, $w7, w24: 3fa8993eff4a591e7ff0000000000000  w7: 407b13ae147ae1480000000000000000 msacsr 00000003
-frsqrt.d $w25, $w10, w25: 7ff8000000000000604a20bd700c2c3d  w10: bfe66666666666660000006000000000 msacsr 00000003
-frsqrt.d $w26, $w29, w26: 3fee82c3f9d89e1b3f458a24b20e5b9d  w29: 3ff199999999999a4141a828c51eb852 msacsr 00000003
-frsqrt.d $w27, $w20, w27: 7ff80000000000000000000000000000  w20: c1b59e0837b333337ff0000000000000 msacsr 00000003
-frsqrt.d $w28, $w6, w28: 3f733bbfdc427cab3fa5555555555555  w6: 40e62526666666664082000000000000 msacsr 00000003
-frsqrt.d $w29, $w24, w29: 3fa55555555555553fa5555555555555  w24: 40820000000000004082000000000000 msacsr 00000003
-frsqrt.d $w30, $w30, w30: 3ff6a09e667f3bcc7ff8000000000000  w30: 3fe0000000000000fff0000000000000 msacsr 00000003
-frsqrt.d $w31, $w6, w31: 7ff80000000000007ff8000000000000  w6: c005395810624dd3c3e0000020000000 msacsr 00000003
 fsqrt.w $w0, $w17, w0: 7fc000007fc000007fc000003f3504f3  w17: cf000001c029cac1ff8000003f000000 msacsr 00000003
 fsqrt.w $w1, $w14, w1: 7fc0000041d3c4127fc000007fc00000  w14: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
 fsqrt.w $w2, $w8, w2: 800000007fc000007fc0000041d3c412  w8: 80000000c447c7ae80500000442f2ccd msacsr 00000003
@@ -29246,6 +28990,262 @@ ffqr.d $w28, $w2, w28: bfdfeb1a9f800000bfdc37202b800000  w2: 44100000458db99ac02
 ffqr.d $w29, $w4, w29: 3fe10400000000003fe1636e66800000  w4: 441000004410000044100000458db99a msacsr 00000003
 ffqr.d $w30, $w15, w30: bf700000000000003fdf800000000000  w15: cf000001c029cac1ff8000003f000000 msacsr 00000003
 ffqr.d $w31, $w28, w31: bfd87fffff800000bfdfeb1a9f800000  w28: 80500000442f2ccdcf000001c029cac1 msacsr 00000003
+frsqrt.w $w0, $w10, msacsr=0: PASS
+frsqrt.w $w1, $w20, msacsr=0: PASS
+frsqrt.w $w2, $w26, msacsr=0: PASS
+frsqrt.w $w3, $w12, msacsr=0: PASS
+frsqrt.w $w4, $w0, msacsr=0: PASS
+frsqrt.w $w5, $w22, msacsr=0: PASS
+frsqrt.w $w6, $w26, msacsr=0: PASS
+frsqrt.w $w7, $w14, msacsr=0: PASS
+frsqrt.w $w8, $w8, msacsr=0: PASS
+frsqrt.w $w9, $w17, msacsr=0: PASS
+frsqrt.w $w10, $w28, msacsr=0: PASS
+frsqrt.w $w11, $w8, msacsr=0: PASS
+frsqrt.w $w12, $w16, msacsr=0: PASS
+frsqrt.w $w13, $w9, msacsr=0: PASS
+frsqrt.w $w14, $w3, msacsr=0: PASS
+frsqrt.w $w15, $w21, msacsr=0: PASS
+frsqrt.w $w16, $w9, msacsr=0: PASS
+frsqrt.w $w17, $w14, msacsr=0: PASS
+frsqrt.w $w18, $w10, msacsr=0: PASS
+frsqrt.w $w19, $w17, msacsr=0: PASS
+frsqrt.w $w20, $w25, msacsr=0: PASS
+frsqrt.w $w21, $w7, msacsr=0: PASS
+frsqrt.w $w22, $w26, msacsr=0: PASS
+frsqrt.w $w23, $w28, msacsr=0: PASS
+frsqrt.w $w24, $w4, msacsr=0: PASS
+frsqrt.w $w25, $w8, msacsr=0: PASS
+frsqrt.w $w26, $w1, msacsr=0: PASS
+frsqrt.w $w27, $w13, msacsr=0: PASS
+frsqrt.w $w28, $w14, msacsr=0: PASS
+frsqrt.w $w29, $w12, msacsr=0: PASS
+frsqrt.w $w30, $w30, msacsr=0: PASS
+frsqrt.w $w31, $w17, msacsr=0: PASS
+frsqrt.d $w0, $w2, msacsr=0: PASS
+frsqrt.d $w1, $w14, msacsr=0: PASS
+frsqrt.d $w2, $w24, msacsr=0: PASS
+frsqrt.d $w3, $w20, msacsr=0: PASS
+frsqrt.d $w4, $w25, msacsr=0: PASS
+frsqrt.d $w5, $w0, msacsr=0: PASS
+frsqrt.d $w6, $w26, msacsr=0: PASS
+frsqrt.d $w7, $w26, msacsr=0: PASS
+frsqrt.d $w8, $w8, msacsr=0: PASS
+frsqrt.d $w9, $w19, msacsr=0: PASS
+frsqrt.d $w10, $w27, msacsr=0: PASS
+frsqrt.d $w11, $w8, msacsr=0: PASS
+frsqrt.d $w12, $w2, msacsr=0: PASS
+frsqrt.d $w13, $w31, msacsr=0: PASS
+frsqrt.d $w14, $w0, msacsr=0: PASS
+frsqrt.d $w15, $w30, msacsr=0: PASS
+frsqrt.d $w16, $w5, msacsr=0: PASS
+frsqrt.d $w17, $w3, msacsr=0: PASS
+frsqrt.d $w18, $w7, msacsr=0: PASS
+frsqrt.d $w19, $w3, msacsr=0: PASS
+frsqrt.d $w20, $w30, msacsr=0: PASS
+frsqrt.d $w21, $w27, msacsr=0: PASS
+frsqrt.d $w22, $w26, msacsr=0: PASS
+frsqrt.d $w23, $w20, msacsr=0: PASS
+frsqrt.d $w24, $w7, msacsr=0: PASS
+frsqrt.d $w25, $w10, msacsr=0: PASS
+frsqrt.d $w26, $w29, msacsr=0: PASS
+frsqrt.d $w27, $w20, msacsr=0: PASS
+frsqrt.d $w28, $w6, msacsr=0: PASS
+frsqrt.d $w29, $w24, msacsr=0: PASS
+frsqrt.d $w30, $w30, msacsr=0: PASS
+frsqrt.d $w31, $w6, msacsr=0: PASS
+frsqrt.w $w0, $w10, msacsr=1: PASS
+frsqrt.w $w1, $w20, msacsr=1: PASS
+frsqrt.w $w2, $w26, msacsr=1: PASS
+frsqrt.w $w3, $w12, msacsr=1: PASS
+frsqrt.w $w4, $w0, msacsr=1: PASS
+frsqrt.w $w5, $w22, msacsr=1: PASS
+frsqrt.w $w6, $w26, msacsr=1: PASS
+frsqrt.w $w7, $w14, msacsr=1: PASS
+frsqrt.w $w8, $w8, msacsr=1: PASS
+frsqrt.w $w9, $w17, msacsr=1: PASS
+frsqrt.w $w10, $w28, msacsr=1: PASS
+frsqrt.w $w11, $w8, msacsr=1: PASS
+frsqrt.w $w12, $w16, msacsr=1: PASS
+frsqrt.w $w13, $w9, msacsr=1: PASS
+frsqrt.w $w14, $w3, msacsr=1: PASS
+frsqrt.w $w15, $w21, msacsr=1: PASS
+frsqrt.w $w16, $w9, msacsr=1: PASS
+frsqrt.w $w17, $w14, msacsr=1: PASS
+frsqrt.w $w18, $w10, msacsr=1: PASS
+frsqrt.w $w19, $w17, msacsr=1: PASS
+frsqrt.w $w20, $w25, msacsr=1: PASS
+frsqrt.w $w21, $w7, msacsr=1: PASS
+frsqrt.w $w22, $w26, msacsr=1: PASS
+frsqrt.w $w23, $w28, msacsr=1: PASS
+frsqrt.w $w24, $w4, msacsr=1: PASS
+frsqrt.w $w25, $w8, msacsr=1: PASS
+frsqrt.w $w26, $w1, msacsr=1: PASS
+frsqrt.w $w27, $w13, msacsr=1: PASS
+frsqrt.w $w28, $w14, msacsr=1: PASS
+frsqrt.w $w29, $w12, msacsr=1: PASS
+frsqrt.w $w30, $w30, msacsr=1: PASS
+frsqrt.w $w31, $w17, msacsr=1: PASS
+frsqrt.d $w0, $w2, msacsr=1: PASS
+frsqrt.d $w1, $w14, msacsr=1: PASS
+frsqrt.d $w2, $w24, msacsr=1: PASS
+frsqrt.d $w3, $w20, msacsr=1: PASS
+frsqrt.d $w4, $w25, msacsr=1: PASS
+frsqrt.d $w5, $w0, msacsr=1: PASS
+frsqrt.d $w6, $w26, msacsr=1: PASS
+frsqrt.d $w7, $w26, msacsr=1: PASS
+frsqrt.d $w8, $w8, msacsr=1: PASS
+frsqrt.d $w9, $w19, msacsr=1: PASS
+frsqrt.d $w10, $w27, msacsr=1: PASS
+frsqrt.d $w11, $w8, msacsr=1: PASS
+frsqrt.d $w12, $w2, msacsr=1: PASS
+frsqrt.d $w13, $w31, msacsr=1: PASS
+frsqrt.d $w14, $w0, msacsr=1: PASS
+frsqrt.d $w15, $w30, msacsr=1: PASS
+frsqrt.d $w16, $w5, msacsr=1: PASS
+frsqrt.d $w17, $w3, msacsr=1: PASS
+frsqrt.d $w18, $w7, msacsr=1: PASS
+frsqrt.d $w19, $w3, msacsr=1: PASS
+frsqrt.d $w20, $w30, msacsr=1: PASS
+frsqrt.d $w21, $w27, msacsr=1: PASS
+frsqrt.d $w22, $w26, msacsr=1: PASS
+frsqrt.d $w23, $w20, msacsr=1: PASS
+frsqrt.d $w24, $w7, msacsr=1: PASS
+frsqrt.d $w25, $w10, msacsr=1: PASS
+frsqrt.d $w26, $w29, msacsr=1: PASS
+frsqrt.d $w27, $w20, msacsr=1: PASS
+frsqrt.d $w28, $w6, msacsr=1: PASS
+frsqrt.d $w29, $w24, msacsr=1: PASS
+frsqrt.d $w30, $w30, msacsr=1: PASS
+frsqrt.d $w31, $w6, msacsr=1: PASS
+frsqrt.w $w0, $w10, msacsr=2: PASS
+frsqrt.w $w1, $w20, msacsr=2: PASS
+frsqrt.w $w2, $w26, msacsr=2: PASS
+frsqrt.w $w3, $w12, msacsr=2: PASS
+frsqrt.w $w4, $w0, msacsr=2: PASS
+frsqrt.w $w5, $w22, msacsr=2: PASS
+frsqrt.w $w6, $w26, msacsr=2: PASS
+frsqrt.w $w7, $w14, msacsr=2: PASS
+frsqrt.w $w8, $w8, msacsr=2: PASS
+frsqrt.w $w9, $w17, msacsr=2: PASS
+frsqrt.w $w10, $w28, msacsr=2: PASS
+frsqrt.w $w11, $w8, msacsr=2: PASS
+frsqrt.w $w12, $w16, msacsr=2: PASS
+frsqrt.w $w13, $w9, msacsr=2: PASS
+frsqrt.w $w14, $w3, msacsr=2: PASS
+frsqrt.w $w15, $w21, msacsr=2: PASS
+frsqrt.w $w16, $w9, msacsr=2: PASS
+frsqrt.w $w17, $w14, msacsr=2: PASS
+frsqrt.w $w18, $w10, msacsr=2: PASS
+frsqrt.w $w19, $w17, msacsr=2: PASS
+frsqrt.w $w20, $w25, msacsr=2: PASS
+frsqrt.w $w21, $w7, msacsr=2: PASS
+frsqrt.w $w22, $w26, msacsr=2: PASS
+frsqrt.w $w23, $w28, msacsr=2: PASS
+frsqrt.w $w24, $w4, msacsr=2: PASS
+frsqrt.w $w25, $w8, msacsr=2: PASS
+frsqrt.w $w26, $w1, msacsr=2: PASS
+frsqrt.w $w27, $w13, msacsr=2: PASS
+frsqrt.w $w28, $w14, msacsr=2: PASS
+frsqrt.w $w29, $w12, msacsr=2: PASS
+frsqrt.w $w30, $w30, msacsr=2: PASS
+frsqrt.w $w31, $w17, msacsr=2: PASS
+frsqrt.d $w0, $w2, msacsr=2: PASS
+frsqrt.d $w1, $w14, msacsr=2: PASS
+frsqrt.d $w2, $w24, msacsr=2: PASS
+frsqrt.d $w3, $w20, msacsr=2: PASS
+frsqrt.d $w4, $w25, msacsr=2: PASS
+frsqrt.d $w5, $w0, msacsr=2: PASS
+frsqrt.d $w6, $w26, msacsr=2: PASS
+frsqrt.d $w7, $w26, msacsr=2: PASS
+frsqrt.d $w8, $w8, msacsr=2: PASS
+frsqrt.d $w9, $w19, msacsr=2: PASS
+frsqrt.d $w10, $w27, msacsr=2: PASS
+frsqrt.d $w11, $w8, msacsr=2: PASS
+frsqrt.d $w12, $w2, msacsr=2: PASS
+frsqrt.d $w13, $w31, msacsr=2: PASS
+frsqrt.d $w14, $w0, msacsr=2: PASS
+frsqrt.d $w15, $w30, msacsr=2: PASS
+frsqrt.d $w16, $w5, msacsr=2: PASS
+frsqrt.d $w17, $w3, msacsr=2: PASS
+frsqrt.d $w18, $w7, msacsr=2: PASS
+frsqrt.d $w19, $w3, msacsr=2: PASS
+frsqrt.d $w20, $w30, msacsr=2: PASS
+frsqrt.d $w21, $w27, msacsr=2: PASS
+frsqrt.d $w22, $w26, msacsr=2: PASS
+frsqrt.d $w23, $w20, msacsr=2: PASS
+frsqrt.d $w24, $w7, msacsr=2: PASS
+frsqrt.d $w25, $w10, msacsr=2: PASS
+frsqrt.d $w26, $w29, msacsr=2: PASS
+frsqrt.d $w27, $w20, msacsr=2: PASS
+frsqrt.d $w28, $w6, msacsr=2: PASS
+frsqrt.d $w29, $w24, msacsr=2: PASS
+frsqrt.d $w30, $w30, msacsr=2: PASS
+frsqrt.d $w31, $w6, msacsr=2: PASS
+frsqrt.w $w0, $w10, msacsr=3: PASS
+frsqrt.w $w1, $w20, msacsr=3: PASS
+frsqrt.w $w2, $w26, msacsr=3: PASS
+frsqrt.w $w3, $w12, msacsr=3: PASS
+frsqrt.w $w4, $w0, msacsr=3: PASS
+frsqrt.w $w5, $w22, msacsr=3: PASS
+frsqrt.w $w6, $w26, msacsr=3: PASS
+frsqrt.w $w7, $w14, msacsr=3: PASS
+frsqrt.w $w8, $w8, msacsr=3: PASS
+frsqrt.w $w9, $w17, msacsr=3: PASS
+frsqrt.w $w10, $w28, msacsr=3: PASS
+frsqrt.w $w11, $w8, msacsr=3: PASS
+frsqrt.w $w12, $w16, msacsr=3: PASS
+frsqrt.w $w13, $w9, msacsr=3: PASS
+frsqrt.w $w14, $w3, msacsr=3: PASS
+frsqrt.w $w15, $w21, msacsr=3: PASS
+frsqrt.w $w16, $w9, msacsr=3: PASS
+frsqrt.w $w17, $w14, msacsr=3: PASS
+frsqrt.w $w18, $w10, msacsr=3: PASS
+frsqrt.w $w19, $w17, msacsr=3: PASS
+frsqrt.w $w20, $w25, msacsr=3: PASS
+frsqrt.w $w21, $w7, msacsr=3: PASS
+frsqrt.w $w22, $w26, msacsr=3: PASS
+frsqrt.w $w23, $w28, msacsr=3: PASS
+frsqrt.w $w24, $w4, msacsr=3: PASS
+frsqrt.w $w25, $w8, msacsr=3: PASS
+frsqrt.w $w26, $w1, msacsr=3: PASS
+frsqrt.w $w27, $w13, msacsr=3: PASS
+frsqrt.w $w28, $w14, msacsr=3: PASS
+frsqrt.w $w29, $w12, msacsr=3: PASS
+frsqrt.w $w30, $w30, msacsr=3: PASS
+frsqrt.w $w31, $w17, msacsr=3: PASS
+frsqrt.d $w0, $w2, msacsr=3: PASS
+frsqrt.d $w1, $w14, msacsr=3: PASS
+frsqrt.d $w2, $w24, msacsr=3: PASS
+frsqrt.d $w3, $w20, msacsr=3: PASS
+frsqrt.d $w4, $w25, msacsr=3: PASS
+frsqrt.d $w5, $w0, msacsr=3: PASS
+frsqrt.d $w6, $w26, msacsr=3: PASS
+frsqrt.d $w7, $w26, msacsr=3: PASS
+frsqrt.d $w8, $w8, msacsr=3: PASS
+frsqrt.d $w9, $w19, msacsr=3: PASS
+frsqrt.d $w10, $w27, msacsr=3: PASS
+frsqrt.d $w11, $w8, msacsr=3: PASS
+frsqrt.d $w12, $w2, msacsr=3: PASS
+frsqrt.d $w13, $w31, msacsr=3: PASS
+frsqrt.d $w14, $w0, msacsr=3: PASS
+frsqrt.d $w15, $w30, msacsr=3: PASS
+frsqrt.d $w16, $w5, msacsr=3: PASS
+frsqrt.d $w17, $w3, msacsr=3: PASS
+frsqrt.d $w18, $w7, msacsr=3: PASS
+frsqrt.d $w19, $w3, msacsr=3: PASS
+frsqrt.d $w20, $w30, msacsr=3: PASS
+frsqrt.d $w21, $w27, msacsr=3: PASS
+frsqrt.d $w22, $w26, msacsr=3: PASS
+frsqrt.d $w23, $w20, msacsr=3: PASS
+frsqrt.d $w24, $w7, msacsr=3: PASS
+frsqrt.d $w25, $w10, msacsr=3: PASS
+frsqrt.d $w26, $w29, msacsr=3: PASS
+frsqrt.d $w27, $w20, msacsr=3: PASS
+frsqrt.d $w28, $w6, msacsr=3: PASS
+frsqrt.d $w29, $w24, msacsr=3: PASS
+frsqrt.d $w30, $w30, msacsr=3: PASS
+frsqrt.d $w31, $w6, msacsr=3: PASS
 Load MSA store FPU  $0 cf000001c029cac1ff8000003f000000 flt 3f000000
 Load MSA store FPU  $1 cf000001c029cac1ff8000003f000000 flt 3f000000
 Load MSA store FPU  $2 cf000001c029cac1ff8000003f000000 flt 3f000000
index 3d724d3a9b74b9865de1c6a1a47d723551bbd276..989979caa95335b99471fa362fa8bcac79ccd75c 100644 (file)
@@ -98,11 +98,15 @@ int main () {
    /* Test log. */
    printf("log(M_E): %lf\n", log(M_E));
 
+   #define EPS 0.0000001
    /* Test tgamma. */
-   printf("tgamma(5.0): %lf\n", tgamma(5.0));
+   double tgamma5 = tgamma(5.0);
+   printf(tgamma5 <= 24.0 + EPS && tgamma5 >= 24.0 - EPS ? "tgamma(5.0): PASS\n" : "tgamma(5.0): FAIL\n");
 
    /* Test cbrt. */
-   printf("cbrt(27.0): %lf\n", cbrt(cube));
+   double cbrt27 = cbrt(cube);
+   printf(cbrt27 <= 3.0 + EPS && cbrt27 >= 3.0 - EPS ? "cbrt(27.0): PASS\n" : "cbrt(27.0): FAIL\n");
+   #undef EPS
 
    /* Test dividing by zero. */
    // Clearing clears.
index 6017e26f41119c025f2e247fccae462b24987e8f..320e6bdfc788855ac18954f19e0c728a8d96248a 100644 (file)
@@ -49,7 +49,7 @@ nearbyint(1234.01): 1234.000000
 nearbyintf(1234.01f): 1234.000000
 nearbyintl(1234.01): 1234.000000
 log(M_E): 1.000000
-tgamma(5.0): 24.000000
-cbrt(27.0): 3.000000
+tgamma(5.0): PASS
+cbrt(27.0): PASS
 feclearexcept(FE_ALL_EXCEPT): 0
 raised: 32