Added more floating point instruction tests.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2347 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/addrcheck/tests/insn_fpu.stdout.exp b/addrcheck/tests/insn_fpu.stdout.exp
index 3f0c7cf..2dbaa07 100644
--- a/addrcheck/tests/insn_fpu.stdout.exp
+++ b/addrcheck/tests/insn_fpu.stdout.exp
@@ -210,6 +210,46 @@
 fildq_2 ... ok
 fildq_3 ... ok
 fildq_4 ... ok
+fists_1 ... ok
+fists_2 ... ok
+fists_3 ... ok
+fists_4 ... ok
+fists_5 ... ok
+fists_6 ... ok
+fists_7 ... ok
+fists_8 ... ok
+fistl_1 ... ok
+fistl_2 ... ok
+fistl_3 ... ok
+fistl_4 ... ok
+fistl_5 ... ok
+fistl_6 ... ok
+fistl_7 ... ok
+fistl_8 ... ok
+fistps_1 ... ok
+fistps_2 ... ok
+fistps_3 ... ok
+fistps_4 ... ok
+fistps_5 ... ok
+fistps_6 ... ok
+fistps_7 ... ok
+fistps_8 ... ok
+fistpl_1 ... ok
+fistpl_2 ... ok
+fistpl_3 ... ok
+fistpl_4 ... ok
+fistpl_5 ... ok
+fistpl_6 ... ok
+fistpl_7 ... ok
+fistpl_8 ... ok
+fistpq_1 ... ok
+fistpq_2 ... ok
+fistpq_3 ... ok
+fistpq_4 ... ok
+fistpq_5 ... ok
+fistpq_6 ... ok
+fistpq_7 ... ok
+fistpq_8 ... ok
 flds_1 ... ok
 flds_2 ... ok
 fldl_1 ... ok
@@ -280,6 +320,22 @@
 fimull_6 ... ok
 fimull_7 ... ok
 fimull_8 ... ok
+frndint_1 ... ok
+frndint_2 ... ok
+frndint_3 ... ok
+frndint_4 ... ok
+frndint_5 ... ok
+frndint_6 ... ok
+frndint_7 ... ok
+frndint_8 ... ok
+frndint_9 ... ok
+frndint_10 ... ok
+frndint_11 ... ok
+frndint_12 ... ok
+frndint_13 ... ok
+frndint_14 ... ok
+frndint_15 ... ok
+frndint_16 ... ok
 fsubs_1 ... ok
 fsubs_2 ... ok
 fsubs_3 ... ok
diff --git a/cachegrind/tests/insn_fpu.stdout.exp b/cachegrind/tests/insn_fpu.stdout.exp
index 3f0c7cf..2dbaa07 100644
--- a/cachegrind/tests/insn_fpu.stdout.exp
+++ b/cachegrind/tests/insn_fpu.stdout.exp
@@ -210,6 +210,46 @@
 fildq_2 ... ok
 fildq_3 ... ok
 fildq_4 ... ok
+fists_1 ... ok
+fists_2 ... ok
+fists_3 ... ok
+fists_4 ... ok
+fists_5 ... ok
+fists_6 ... ok
+fists_7 ... ok
+fists_8 ... ok
+fistl_1 ... ok
+fistl_2 ... ok
+fistl_3 ... ok
+fistl_4 ... ok
+fistl_5 ... ok
+fistl_6 ... ok
+fistl_7 ... ok
+fistl_8 ... ok
+fistps_1 ... ok
+fistps_2 ... ok
+fistps_3 ... ok
+fistps_4 ... ok
+fistps_5 ... ok
+fistps_6 ... ok
+fistps_7 ... ok
+fistps_8 ... ok
+fistpl_1 ... ok
+fistpl_2 ... ok
+fistpl_3 ... ok
+fistpl_4 ... ok
+fistpl_5 ... ok
+fistpl_6 ... ok
+fistpl_7 ... ok
+fistpl_8 ... ok
+fistpq_1 ... ok
+fistpq_2 ... ok
+fistpq_3 ... ok
+fistpq_4 ... ok
+fistpq_5 ... ok
+fistpq_6 ... ok
+fistpq_7 ... ok
+fistpq_8 ... ok
 flds_1 ... ok
 flds_2 ... ok
 fldl_1 ... ok
@@ -280,6 +320,22 @@
 fimull_6 ... ok
 fimull_7 ... ok
 fimull_8 ... ok
+frndint_1 ... ok
+frndint_2 ... ok
+frndint_3 ... ok
+frndint_4 ... ok
+frndint_5 ... ok
+frndint_6 ... ok
+frndint_7 ... ok
+frndint_8 ... ok
+frndint_9 ... ok
+frndint_10 ... ok
+frndint_11 ... ok
+frndint_12 ... ok
+frndint_13 ... ok
+frndint_14 ... ok
+frndint_15 ... ok
+frndint_16 ... ok
 fsubs_1 ... ok
 fsubs_2 ... ok
 fsubs_3 ... ok
diff --git a/helgrind/tests/insn_fpu.stdout.exp b/helgrind/tests/insn_fpu.stdout.exp
index 3f0c7cf..2dbaa07 100644
--- a/helgrind/tests/insn_fpu.stdout.exp
+++ b/helgrind/tests/insn_fpu.stdout.exp
@@ -210,6 +210,46 @@
 fildq_2 ... ok
 fildq_3 ... ok
 fildq_4 ... ok
+fists_1 ... ok
+fists_2 ... ok
+fists_3 ... ok
+fists_4 ... ok
+fists_5 ... ok
+fists_6 ... ok
+fists_7 ... ok
+fists_8 ... ok
+fistl_1 ... ok
+fistl_2 ... ok
+fistl_3 ... ok
+fistl_4 ... ok
+fistl_5 ... ok
+fistl_6 ... ok
+fistl_7 ... ok
+fistl_8 ... ok
+fistps_1 ... ok
+fistps_2 ... ok
+fistps_3 ... ok
+fistps_4 ... ok
+fistps_5 ... ok
+fistps_6 ... ok
+fistps_7 ... ok
+fistps_8 ... ok
+fistpl_1 ... ok
+fistpl_2 ... ok
+fistpl_3 ... ok
+fistpl_4 ... ok
+fistpl_5 ... ok
+fistpl_6 ... ok
+fistpl_7 ... ok
+fistpl_8 ... ok
+fistpq_1 ... ok
+fistpq_2 ... ok
+fistpq_3 ... ok
+fistpq_4 ... ok
+fistpq_5 ... ok
+fistpq_6 ... ok
+fistpq_7 ... ok
+fistpq_8 ... ok
 flds_1 ... ok
 flds_2 ... ok
 fldl_1 ... ok
@@ -280,6 +320,22 @@
 fimull_6 ... ok
 fimull_7 ... ok
 fimull_8 ... ok
+frndint_1 ... ok
+frndint_2 ... ok
+frndint_3 ... ok
+frndint_4 ... ok
+frndint_5 ... ok
+frndint_6 ... ok
+frndint_7 ... ok
+frndint_8 ... ok
+frndint_9 ... ok
+frndint_10 ... ok
+frndint_11 ... ok
+frndint_12 ... ok
+frndint_13 ... ok
+frndint_14 ... ok
+frndint_15 ... ok
+frndint_16 ... ok
 fsubs_1 ... ok
 fsubs_2 ... ok
 fsubs_3 ... ok
diff --git a/memcheck/tests/insn_fpu.stdout.exp b/memcheck/tests/insn_fpu.stdout.exp
index 3f0c7cf..2dbaa07 100644
--- a/memcheck/tests/insn_fpu.stdout.exp
+++ b/memcheck/tests/insn_fpu.stdout.exp
@@ -210,6 +210,46 @@
 fildq_2 ... ok
 fildq_3 ... ok
 fildq_4 ... ok
+fists_1 ... ok
+fists_2 ... ok
+fists_3 ... ok
+fists_4 ... ok
+fists_5 ... ok
+fists_6 ... ok
+fists_7 ... ok
+fists_8 ... ok
+fistl_1 ... ok
+fistl_2 ... ok
+fistl_3 ... ok
+fistl_4 ... ok
+fistl_5 ... ok
+fistl_6 ... ok
+fistl_7 ... ok
+fistl_8 ... ok
+fistps_1 ... ok
+fistps_2 ... ok
+fistps_3 ... ok
+fistps_4 ... ok
+fistps_5 ... ok
+fistps_6 ... ok
+fistps_7 ... ok
+fistps_8 ... ok
+fistpl_1 ... ok
+fistpl_2 ... ok
+fistpl_3 ... ok
+fistpl_4 ... ok
+fistpl_5 ... ok
+fistpl_6 ... ok
+fistpl_7 ... ok
+fistpl_8 ... ok
+fistpq_1 ... ok
+fistpq_2 ... ok
+fistpq_3 ... ok
+fistpq_4 ... ok
+fistpq_5 ... ok
+fistpq_6 ... ok
+fistpq_7 ... ok
+fistpq_8 ... ok
 flds_1 ... ok
 flds_2 ... ok
 fldl_1 ... ok
@@ -280,6 +320,22 @@
 fimull_6 ... ok
 fimull_7 ... ok
 fimull_8 ... ok
+frndint_1 ... ok
+frndint_2 ... ok
+frndint_3 ... ok
+frndint_4 ... ok
+frndint_5 ... ok
+frndint_6 ... ok
+frndint_7 ... ok
+frndint_8 ... ok
+frndint_9 ... ok
+frndint_10 ... ok
+frndint_11 ... ok
+frndint_12 ... ok
+frndint_13 ... ok
+frndint_14 ... ok
+frndint_15 ... ok
+frndint_16 ... ok
 fsubs_1 ... ok
 fsubs_2 ... ok
 fsubs_3 ... ok
diff --git a/none/tests/gen_insn_test.pl b/none/tests/gen_insn_test.pl
index 8e8da41..395f627 100644
--- a/none/tests/gen_insn_test.pl
+++ b/none/tests/gen_insn_test.pl
@@ -16,6 +16,7 @@
                  m128 => "reg128_t",
                  eflags => "reg32_t",
                  st => "reg64_t",
+                 fpucw => "reg16_t",
                  fpusw => "reg16_t"
                  );
 
@@ -194,6 +195,8 @@
     my $presetc = 0;
     my $eflagsmask;
     my $eflagsset;
+    my $fpucwmask;
+    my $fpucwset;
     my $fpuswmask;
     my $fpuswset;
 
@@ -281,8 +284,19 @@
             $values[0] = oct($values[0]) if $values[0] =~ /^0/;
             $values[1] = oct($values[1]) if $values[1] =~ /^0/;
 
-            $eflagsmask = sprintf "0x%x", ~$values[0];
-            $eflagsset = sprintf "0x%x", $values[1];
+            $eflagsmask = sprintf "0x%08x", $values[0] ^ 0xffffffff;
+            $eflagsset = sprintf "0x%08x", $values[1];
+        }
+        elsif ($preset =~ /^(fpucw)\[([^\]]+)\]$/)
+        {
+            my $type = $1;
+            my @values = split(/,/, $2);
+
+            $values[0] = oct($values[0]) if $values[0] =~ /^0/;
+            $values[1] = oct($values[1]) if $values[1] =~ /^0/;
+
+            $fpucwmask = sprintf "0x%04x", $values[0] ^ 0xffff;
+            $fpucwset = sprintf "0x%04x", $values[1];
         }
         elsif ($preset =~ /^(fpusw)\[([^\]]+)\]$/)
         {
@@ -292,8 +306,8 @@
             $values[0] = oct($values[0]) if $values[0] =~ /^0/;
             $values[1] = oct($values[1]) if $values[1] =~ /^0/;
 
-            $fpuswmask = sprintf "0x%x", ~$values[0];
-            $fpuswset = sprintf "0x%x", $values[1];
+            $fpuswmask = sprintf "0x%04x", $values[0] ^ 0xffff;
+            $fpuswset = sprintf "0x%04x", $values[1];
         }
         else
         {
@@ -512,7 +526,7 @@
                 name => $name,
                 type => "eflags",
                 subtype => "ud",
-                values => [ map { sprintf "0x%x", $_ } @values ]
+                values => [ map { sprintf "0x%08x", $_ } @values ]
             };
 
             push @results, $result;
@@ -521,8 +535,32 @@
 
             if (!defined($eflagsmask) && !defined($eflagsset))
             {
-                $eflagsmask = sprintf "0x%x", ~$values[0];
-                $eflagsset = sprintf "0x%x", $values[0] & ~$values[1];
+                $eflagsmask = sprintf "0x%08x", $values[0] ^ 0xffffffff;
+                $eflagsset = sprintf "0x%08x", $values[0] & ~$values[1];
+            }
+        }
+        elsif ($result =~ /^fpucw\[([^\]]+)\]$/)
+        {
+            my @values = split(/,/, $1);
+            
+            $values[0] = oct($values[0]) if $values[0] =~ /^0/;
+            $values[1] = oct($values[1]) if $values[1] =~ /^0/;
+            
+            my $result = {
+                name => $name,
+                type => "fpucw",
+                subtype => "ud",
+                values => [ map { sprintf "0x%04x", $_ } @values ]
+            };
+
+            push @results, $result;
+            
+            print qq|   $ArgTypes{fpucw} $name;\n|;
+
+            if (!defined($fpucwmask) && !defined($fpucwset))
+            {
+                $fpucwmask = sprintf "0x%04x", $values[0] ^ 0xffff;
+                $fpucwset = sprintf "0x%04x", $values[0] & ~$values[1];
             }
         }
         elsif ($result =~ /^fpusw\[([^\]]+)\]$/)
@@ -536,7 +574,7 @@
                 name => $name,
                 type => "fpusw",
                 subtype => "ud",
-                values => [ map { sprintf "0x%x", $_ } @values ]
+                values => [ map { sprintf "0x%04x", $_ } @values ]
             };
 
             push @results, $result;
@@ -545,8 +583,8 @@
 
             if (!defined($fpuswmask) && !defined($fpuswset))
             {
-                $fpuswmask = sprintf "0x%x", ~$values[0];
-                $fpuswset = sprintf "0x%x", $values[0] & ~$values[1];
+                $fpuswmask = sprintf "0x%04x", $values[0] ^ 0xffff;
+                $fpuswset = sprintf "0x%04x", $values[0] & ~$values[1];
             }
         }
         else
@@ -561,7 +599,7 @@
 
     foreach my $result (@results)
     {
-        if ($result->{type} =~ /^(m(8|16|32|64|128)|st|eflags|fpusw)$/)
+        if ($result->{type} =~ /^(m(8|16|32|64|128)|st|eflags|fpu[cs]w)$/)
         {
             $result->{argnum} = $argnum++;
         }
@@ -650,6 +688,16 @@
         print qq|         \"popfl\\n\"\n|;
     }
 
+    if (defined($fpucwmask) || defined($fpucwset))
+    {
+        print qq|         \"subl \$2, %%esp\\n\"\n|;
+        print qq|         \"fstcw (%%esp)\\n\"\n|;
+        print qq|         \"andw \$$fpucwmask, (%%esp)\\n\"\n| if defined($fpucwmask);
+        print qq|         \"orw \$$fpucwset, (%%esp)\\n\"\n| if defined($fpucwset);
+        print qq|         \"fldcw (%%esp)\\n\"\n|;
+        print qq|         \"addl \$2, %%esp\\n\"\n|;
+    }
+
     print qq|         \"$insn|;
     
     my $prefix = " ";
@@ -725,6 +773,10 @@
             print qq|         \"pushfl\\n\"\n|;
             print qq|         \"popl %$result->{argnum}\\n\"\n|;
         }
+        elsif ($result->{type} eq "fpucw")
+        {
+            print qq|         \"fstcw %$result->{argnum}\\n\"\n|;
+        }
         elsif ($result->{type} eq "fpusw")
         {
             print qq|         \"fstsw %$result->{argnum}\\n\"\n|;
@@ -758,7 +810,7 @@
 
     foreach my $result (@results)
     {
-        if ($result->{type} =~ /^(m(8|16|32|64|128)|st|eflags|fpusw)$/)
+        if ($result->{type} =~ /^(m(8|16|32|64|128)|st|eflags|fpu[cs]w)$/)
         {
             print qq|$prefix\"=m\" \($result->{name}\)|;
             $prefix = ", ";
@@ -820,7 +872,7 @@
         {
             print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
         }
-        elsif ($type eq "fpusw")
+        elsif ($type =~ /^fpu[cs]w$/)
         {
             print qq|${prefix}\($result->{name}.uw[0] & $values[0]\) == $values[1]|;
         }
@@ -867,9 +919,9 @@
         {
             print qq|         printf("  eflags & 0x%lx = 0x%lx (expected 0x%lx)\\n", $values[0]UL, $result->{name}.ud\[0\] & $values[0]UL, $values[1]UL);\n|;
         }
-        elsif ($type eq "fpusw")
+        elsif ($type =~ /^fpu[cs]w$/)
         {
-            print qq|         printf("  fpusw & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
+            print qq|         printf("  $type & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
         }
         else
         {
diff --git a/none/tests/insn_fpu.def b/none/tests/insn_fpu.def
index ea0352e..c99815e 100644
--- a/none/tests/insn_fpu.def
+++ b/none/tests/insn_fpu.def
@@ -210,6 +210,46 @@
 fildq m64.sq[-123456787654321] => st0.ps[-123456787654321.0]
 fildq m64.sq[123456787654321] => st0.pd[123456787654321.0]
 fildq m64.sq[-123456787654321] => st0.pd[-123456787654321.0]
+fists fpucw[0xc00,0x000] st0.ps[1234.5678] : m16.sw[0] => 0.sw[1235] st0.ps[1234.5678]
+fists fpucw[0xc00,0x000] st0.ps[-1234.5678] : m16.sw[0] => 0.sw[-1235] st0.ps[-1234.5678]
+fists fpucw[0xc00,0x400] st0.ps[1234.5678] : m16.sw[0] => 0.sw[1234] st0.ps[1234.5678]
+fists fpucw[0xc00,0x400] st0.ps[-1234.5678] : m16.sw[0] => 0.sw[-1235] st0.ps[-1234.5678]
+fists fpucw[0xc00,0x800] st0.ps[1234.5678] : m16.sw[0] => 0.sw[1235] st0.ps[1234.5678]
+fists fpucw[0xc00,0x800] st0.ps[-1234.5678] : m16.sw[0] => 0.sw[-1234] st0.ps[-1234.5678]
+fists fpucw[0xc00,0xc00] st0.ps[1234.5678] : m16.sw[0] => 0.sw[1234] st0.ps[1234.5678]
+fists fpucw[0xc00,0xc00] st0.ps[-1234.5678] : m16.sw[0] => 0.sw[-1234] st0.ps[-1234.5678]
+fistl fpucw[0xc00,0x000] st0.pd[1234567.7654321] : m32.sd[0] => 0.sd[1234568] st0.pd[1234567.7654321]
+fistl fpucw[0xc00,0x000] st0.pd[-1234567.7654321] : m32.sd[0] => 0.sd[-1234568] st0.pd[-1234567.7654321]
+fistl fpucw[0xc00,0x400] st0.pd[1234567.7654321] : m32.sd[0] => 0.sd[1234567] st0.pd[1234567.7654321]
+fistl fpucw[0xc00,0x400] st0.pd[-1234567.7654321] : m32.sd[0] => 0.sd[-1234568] st0.pd[-1234567.7654321]
+fistl fpucw[0xc00,0x800] st0.pd[1234567.7654321] : m32.sd[0] => 0.sd[1234568] st0.pd[1234567.7654321]
+fistl fpucw[0xc00,0x800] st0.pd[-1234567.7654321] : m32.sd[0] => 0.sd[-1234567] st0.pd[-1234567.7654321]
+fistl fpucw[0xc00,0xc00] st0.pd[1234567.7654321] : m32.sd[0] => 0.sd[1234567] st0.pd[1234567.7654321]
+fistl fpucw[0xc00,0xc00] st0.pd[-1234567.7654321] : m32.sd[0] => 0.sd[-1234567] st0.pd[-1234567.7654321]
+fistps fpucw[0xc00,0x000] st0.ps[1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[1235] st0.ps[1111.1111]
+fistps fpucw[0xc00,0x000] st0.ps[-1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[-1235] st0.ps[1111.1111]
+fistps fpucw[0xc00,0x400] st0.ps[1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[1234] st0.ps[1111.1111]
+fistps fpucw[0xc00,0x400] st0.ps[-1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[-1235] st0.ps[1111.1111]
+fistps fpucw[0xc00,0x800] st0.ps[1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[1235] st0.ps[1111.1111]
+fistps fpucw[0xc00,0x800] st0.ps[-1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[-1234] st0.ps[1111.1111]
+fistps fpucw[0xc00,0xc00] st0.ps[1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[1234] st0.ps[1111.1111]
+fistps fpucw[0xc00,0xc00] st0.ps[-1234.5678] st1.ps[1111.1111] : m16.sw[0] => 0.sw[-1234] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x000] st0.pd[1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[1234568] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x000] st0.pd[-1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[-1234568] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x400] st0.pd[1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[1234567] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x400] st0.pd[-1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[-1234568] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x800] st0.pd[1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[1234568] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0x800] st0.pd[-1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[-1234567] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0xc00] st0.pd[1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[1234567] st0.ps[1111.1111]
+fistpl fpucw[0xc00,0xc00] st0.pd[-1234567.7654321] st1.ps[1111.1111] : m32.sd[0] => 0.sd[-1234567] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x000] st0.pd[123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[123456787654322] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x000] st0.pd[-123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[-123456787654322] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x400] st0.pd[123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[123456787654321] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x400] st0.pd[-123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[-123456787654322] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x800] st0.pd[123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[123456787654322] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0x800] st0.pd[-123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[-123456787654321] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0xc00] st0.pd[123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[123456787654321] st0.ps[1111.1111]
+fistpq fpucw[0xc00,0xc00] st0.pd[-123456787654321.6] st1.ps[1111.1111] : m64.sq[0] => 0.sq[-123456787654321] st0.ps[1111.1111]
 flds m32.ps[1234.5678] => st0.ps[1234.5678]
 flds m32.ps[-1234.5678] => st0.ps[-1234.5678]
 fldl m64.pd[1234567.7654321] => st0.pd[1234567.7654321]
@@ -280,6 +320,22 @@
 fimull st0.pd[-1234567.7654321] : m32.sd[654321] => st0.pd[-807803614845.297]
 fimull st0.pd[1234567.7654321] : m32.sd[-654321] => st0.pd[-807803614845.297]
 fimull st0.pd[-1234567.7654321] : m32.sd[-654321] => st0.pd[807803614845.297]
+frndint fpucw[0xc00,0x000] st0.ps[1234.5678] : => st0.ps[1235.0]
+frndint fpucw[0xc00,0x000] st0.ps[-1234.5678] : => st0.ps[-1235.0]
+frndint fpucw[0xc00,0x400] st0.ps[1234.5678] : => st0.ps[1234.0]
+frndint fpucw[0xc00,0x400] st0.ps[-1234.5678] : => st0.ps[-1235.0]
+frndint fpucw[0xc00,0x800] st0.ps[1234.5678] : => st0.ps[1235.0]
+frndint fpucw[0xc00,0x800] st0.ps[-1234.5678] : => st0.ps[-1234.0]
+frndint fpucw[0xc00,0xc00] st0.ps[1234.5678] : => st0.ps[1234.0]
+frndint fpucw[0xc00,0xc00] st0.ps[-1234.5678] : => st0.ps[-1234.0]
+frndint fpucw[0xc00,0x000] st0.pd[1234567.7654321] : => st0.pd[1234568.0]
+frndint fpucw[0xc00,0x000] st0.pd[-1234567.7654321] : => st0.pd[-1234568.0]
+frndint fpucw[0xc00,0x400] st0.pd[1234567.7654321] : => st0.pd[1234567.0]
+frndint fpucw[0xc00,0x400] st0.pd[-1234567.7654321] : => st0.pd[-1234568.0]
+frndint fpucw[0xc00,0x800] st0.pd[1234567.7654321] : => st0.pd[1234568.0]
+frndint fpucw[0xc00,0x800] st0.pd[-1234567.7654321] : => st0.pd[-1234567.0]
+frndint fpucw[0xc00,0xc00] st0.pd[1234567.7654321] : => st0.pd[1234567.0]
+frndint fpucw[0xc00,0xc00] st0.pd[-1234567.7654321] : => st0.pd[-1234567.0]
 fsubs st0.ps[1234.5678] : m32.ps[8765.4321] => st0.ps[-7530.8643]
 fsubs st0.ps[-1234.5678] : m32.ps[8765.4321] => st0.ps[-9999.9990]
 fsubs st0.ps[1234.5678] : m32.ps[-8765.4321] => st0.ps[9999.9999]
diff --git a/none/tests/insn_fpu.stdout.exp b/none/tests/insn_fpu.stdout.exp
index 3f0c7cf..2dbaa07 100644
--- a/none/tests/insn_fpu.stdout.exp
+++ b/none/tests/insn_fpu.stdout.exp
@@ -210,6 +210,46 @@
 fildq_2 ... ok
 fildq_3 ... ok
 fildq_4 ... ok
+fists_1 ... ok
+fists_2 ... ok
+fists_3 ... ok
+fists_4 ... ok
+fists_5 ... ok
+fists_6 ... ok
+fists_7 ... ok
+fists_8 ... ok
+fistl_1 ... ok
+fistl_2 ... ok
+fistl_3 ... ok
+fistl_4 ... ok
+fistl_5 ... ok
+fistl_6 ... ok
+fistl_7 ... ok
+fistl_8 ... ok
+fistps_1 ... ok
+fistps_2 ... ok
+fistps_3 ... ok
+fistps_4 ... ok
+fistps_5 ... ok
+fistps_6 ... ok
+fistps_7 ... ok
+fistps_8 ... ok
+fistpl_1 ... ok
+fistpl_2 ... ok
+fistpl_3 ... ok
+fistpl_4 ... ok
+fistpl_5 ... ok
+fistpl_6 ... ok
+fistpl_7 ... ok
+fistpl_8 ... ok
+fistpq_1 ... ok
+fistpq_2 ... ok
+fistpq_3 ... ok
+fistpq_4 ... ok
+fistpq_5 ... ok
+fistpq_6 ... ok
+fistpq_7 ... ok
+fistpq_8 ... ok
 flds_1 ... ok
 flds_2 ... ok
 fldl_1 ... ok
@@ -280,6 +320,22 @@
 fimull_6 ... ok
 fimull_7 ... ok
 fimull_8 ... ok
+frndint_1 ... ok
+frndint_2 ... ok
+frndint_3 ... ok
+frndint_4 ... ok
+frndint_5 ... ok
+frndint_6 ... ok
+frndint_7 ... ok
+frndint_8 ... ok
+frndint_9 ... ok
+frndint_10 ... ok
+frndint_11 ... ok
+frndint_12 ... ok
+frndint_13 ... ok
+frndint_14 ... ok
+frndint_15 ... ok
+frndint_16 ... ok
 fsubs_1 ... ok
 fsubs_2 ... ok
 fsubs_3 ... ok