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