my $args;
my $results;
- if (/^(\S+)\s+(?:(\S+(?:\s+\S+)*)\s+:\s+)?((?:\S+\s+)*)=>\s+(\S+(?:\s+\S+)*)$/)
+ if (/^(\S+)\s+(?:(\S+(?:\s+\S+)*)\s+:\s+)?((?:\S+\s+)*?)(?:=>\s+(\S+(?:\s+\S+)*))?$/)
{
$insn = $1;
$presets = $2 || "";
- $args = $3;
- $results = $4;
+ $args = $3 || "";
+ $results = $4 || "";
+
+# print STDERR "insn: $insn\n";
+# print STDERR "presets: $presets\n";
+# print STDERR "args: $args\n";
+# print STDERR "results: $results\n";
}
else
{
print qq| \);\n|;
print qq|\n|;
- print qq| if \(|;
-
- $prefix = "";
-
- foreach my $result (@results)
+ if (@results)
{
- my $type = $result->{type};
- my $subtype = $result->{subtype};
- my $suffix = $SubTypeSuffixes{$subtype};
- my @values = @{$result->{values}};
-
- if ($type eq "eflags")
- {
- print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
- }
- elsif ($type =~ /^fpu[cs]w$/)
- {
- print qq|${prefix}\($result->{name}.uw[0] & $values[0]\) == $values[1]|;
- }
- else
+ print qq| if \(|;
+
+ $prefix = "";
+
+ foreach my $result (@results)
{
- foreach my $value (0 .. $#values)
+ my $type = $result->{type};
+ my $subtype = $result->{subtype};
+ my $suffix = $SubTypeSuffixes{$subtype};
+ my @values = @{$result->{values}};
+
+ if ($type eq "eflags")
{
- if ($subtype eq "ps")
- {
- print qq|${prefix}eq_float($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
- }
- elsif ($subtype eq "pd")
- {
- print qq|${prefix}eq_double($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
- }
- else
+ print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
+ }
+ elsif ($type =~ /^fpu[cs]w$/)
+ {
+ print qq|${prefix}\($result->{name}.uw[0] & $values[0]\) == $values[1]|;
+ }
+ else
+ {
+ foreach my $value (0 .. $#values)
{
- print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|;
+ if ($subtype eq "ps")
+ {
+ print qq|${prefix}eq_float($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
+ }
+ elsif ($subtype eq "pd")
+ {
+ print qq|${prefix}eq_double($result->{name}.$subtype\[$value\], $values[$value]$suffix)|;
+ }
+ else
+ {
+ print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|;
+ }
+
+ $prefix = " && ";
}
-
- $prefix = " && ";
}
+
+ $prefix = " &&\n ";
}
- $prefix = " &&\n ";
- }
-
- print qq| \)\n|;
- print qq| \{\n|;
- print qq| printf("$test ... ok\\n");\n|;
- print qq| \}\n|;
- print qq| else\n|;
- print qq| \{\n|;
- print qq| printf("$test ... not ok\\n");\n|;
-
- foreach my $result (@results)
- {
- my $type = $result->{type};
- my $subtype = $result->{subtype};
- my $suffix = $SubTypeSuffixes{$subtype};
- my @values = @{$result->{values}};
-
- if ($type eq "eflags")
- {
- 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 =~ /^fpu[cs]w$/)
- {
- print qq| printf(" $type & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
- }
- else
+ print qq| \)\n|;
+ print qq| \{\n|;
+ print qq| printf("$test ... ok\\n");\n|;
+ print qq| \}\n|;
+ print qq| else\n|;
+ print qq| \{\n|;
+ print qq| printf("$test ... not ok\\n");\n|;
+
+ foreach my $result (@results)
{
- foreach my $value (0 .. $#values)
+ my $type = $result->{type};
+ my $subtype = $result->{subtype};
+ my $suffix = $SubTypeSuffixes{$subtype};
+ my @values = @{$result->{values}};
+
+ if ($type eq "eflags")
+ {
+ 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 =~ /^fpu[cs]w$/)
+ {
+ print qq| printf(" $type & 0x%x = 0x%x (expected 0x%x)\\n", $values[0], $result->{name}.uw\[0\] & $values[0], $values[1]);\n|;
+ }
+ else
{
- print qq| printf(" $result->{name}.$subtype\[$value\] = $SubTypeFormats{$subtype} (expected $SubTypeFormats{$subtype})\\n", $result->{name}.$subtype\[$value\], $values[$value]$suffix);\n|;
+ foreach my $value (0 .. $#values)
+ {
+ print qq| printf(" $result->{name}.$subtype\[$value\] = $SubTypeFormats{$subtype} (expected $SubTypeFormats{$subtype})\\n", $result->{name}.$subtype\[$value\], $values[$value]$suffix);\n|;
+ }
}
}
+
+ print qq| \}\n|;
}
-
- print qq| \}\n|;
+ else
+ {
+ print qq| printf("$test ... ok\\n");\n|;
+ }
+
print qq| \}\n|;
print qq| else\n|;
print qq| \{\n|;
psadbw m64.ub[1,2,3,4,5,6,7,8] mm.ub[8,7,6,5,4,3,2,1] => 1.sw[32,0,0,0]
pshufw imm8[0x1b] mm.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11]
pshufw imm8[0x1b] m64.sw[11,22,33,44] mm.sw[0,0,0,0] => 2.sw[44,33,22,11]
+sfence
rsqrtps m128.ps[4.0,16.0,25.0,64.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.499878,0.249939,0.199982,0.124969]
rsqrtss xmm.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44]
rsqrtss m128.ps[16.0,5.55,6.66,7.77] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[0.249939,2.22,3.33,4.44]
+sfence
shufps imm8[0xe4] xmm.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[12.34,56.78,43.21,87.65]
shufps imm8[0xb1] m128.ps[12.34,56.78,43.21,87.65] xmm.ps[12.34,56.78,43.21,87.65] => 2.ps[56.78,12.34,87.65,43.21]
sqrtps xmm.ps[16.0,25.0,36.0,49.0] xmm.ps[1.11,2.22,3.33,4.44] => 1.ps[4.0,5.0,6.0,7.0]
divpd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,1.23]
divsd xmm.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69]
divsd m128.pd[2.0,3.0] xmm.pd[24.68,3.69] => 1.pd[12.34,3.69]
+lfence
maxpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444]
maxpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,44.444]
maxsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[55.555,33.333]
maxsd m128.pd[44.444,22.222] xmm.pd[33.333,55.555] => 1.pd[44.444,55.555]
+mfence
minpd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333]
minpd m128.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333]
minsd xmm.pd[22.222,44.444] xmm.pd[55.555,33.333] => 1.pd[22.222,33.333]