|
From: Dirk M. <mu...@kd...> - 2004-02-23 22:10:20
|
CVS commit by mueller:
patch by Tom Hughes to make it work with gcc 2.96
M +102 -74 gen_insn_test.pl 1.4
--- valgrind/none/tests/gen_insn_test.pl #1.3:1.4
@@ -215,16 +215,16 @@
push @presets, $preset;
- print qq| $ArgTypes{$type} $name = \{|;
+ print qq| $ArgTypes{$type} $name = \{ .$subtype = \{|;
my $valuec = 0;
foreach my $value (@values)
- {
+ {
print qq|,| if $valuec > 0;
- print qq| .$subtype\[$valuec\] = $value$SubTypeSuffixes{$subtype}|;
+ print qq| $value$SubTypeSuffixes{$subtype}|;
$valuec++;
}
- print qq| \};\n|;
+ print qq| \} \};\n|;
$presetc++;
@@ -278,5 +278,5 @@
push @args, $arg;
- print qq| $ArgTypes{$type} $name = \{|;
+ print qq| $ArgTypes{$type} $name = \{ .$subtype = \{|;
my $valuec = 0;
@@ -285,9 +285,9 @@
{
print qq|,| if $valuec > 0;
- print qq| .$subtype\[$valuec\] = $value$SubTypeSuffixes{$subtype}|;
+ print qq| $value$SubTypeSuffixes{$subtype}|;
$valuec++;
}
- print qq| \};\n|;
+ print qq| \} \};\n|;
}
elsif ($arg =~ /^(imm8|imm16|imm32)\[([^\]]+)\]$/)
@@ -339,6 +339,6 @@
my $name = "result$resultc";
- if ($result =~ /^(\d+)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/)
- {
+ if ($result =~ /^(\d+)\.(sb|ub|sw|uw|sd|ud|sq|uq|ps|pd)\[([^\]]+)\]$/)
+ {
my $index = $1;
my $type = $args[$index]->{type};
@@ -383,12 +383,12 @@
print qq| $ArgTypes{$type} $name;\n|;
- }
- elsif ($result =~ /^eflags\[([^\]]+)\]$/)
- {
+ }
+ elsif ($result =~ /^eflags\[([^\]]+)\]$/)
+ {
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,
@@ -407,13 +407,41 @@
$eflagsset = sprintf "0x%x", $values[0] & ~$values[1];
}
+ }
+ else
+ {
+ die "Can't parse result $result";
+ }
+
+ $resultc++;
}
- else
+
+ my $argnum = 0;
+
+ foreach my $result (@results)
{
- die "Can't parse result $result";
+ if ($result->{type} =~ /^(m(8|16|32|64|128)|eflags)$/)
+ {
+ $result->{argnum} = $argnum++;
+ }
}
- $resultc++;
+ foreach my $arg (@presets, @args)
+ {
+ if (defined($arg->{name}))
+ {
+ $arg->{argnum} = $argnum++;
+ }
}
+ foreach my $result (@results)
+ {
+ if ($result->{type} =~ /^(r(8|16|32)|mm|xmm)$/)
+ {
+ $result->{argnum} = $argnum++;
+ }
+ }
+
+ my $stateargnum = $argnum++;
+
print qq| char state\[108\];\n|;
print qq|\n|;
@@ -421,5 +449,5 @@
print qq| \{\n|;
print qq| asm\(\n|;
- print qq| \"fsave %\[state\]\\n\"\n|;
+ print qq| \"fsave %$stateargnum\\n\"\n|;
foreach my $arg (@presets, @args)
@@ -427,23 +455,23 @@
if ($arg->{type} eq "r8")
{
- print qq| \"movb %\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
+ print qq| \"movb %$arg->{argnum}, %%$arg->{register}\\n\"\n|;
}
elsif ($arg->{type} eq "r16")
{
- print qq| \"movw %\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
+ print qq| \"movw %$arg->{argnum}, %%$arg->{register}\\n\"\n|;
}
elsif ($arg->{type} eq "r32")
{
- print qq| \"movl %\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
+ print qq| \"movl %$arg->{argnum}, %%$arg->{register}\\n\"\n|;
}
elsif ($arg->{type} eq "mm")
- {
- print qq| \"movq %\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
- }
+ {
+ print qq| \"movq %$arg->{argnum}, %%$arg->{register}\\n\"\n|;
+ }
elsif ($arg->{type} eq "xmm")
- {
- print qq| \"movlps 0%\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
- print qq| \"movhps 8%\[$arg->{name}\], %%$arg->{register}\\n\"\n|;
- }
+ {
+ print qq| \"movlps 0%$arg->{argnum}, %%$arg->{register}\\n\"\n|;
+ print qq| \"movhps 8%$arg->{argnum}, %%$arg->{register}\\n\"\n|;
+ }
}
@@ -461,5 +489,5 @@
foreach my $arg (@args)
- {
+ {
next if $arg->{type} eq "eflags";
@@ -472,9 +500,9 @@
if (exists($arg->{result}))
{
- print qq|$prefix%\[$arg->{result}->{name}\]|;
+ print qq|$prefix%$arg->{result}->{argnum}|;
}
else
{
- print qq|$prefix%\[$arg->{name}\]|;
+ print qq|$prefix%$arg->{argnum}|;
}
}
@@ -493,31 +521,31 @@
if ($result->{type} eq "r8")
{
- print qq| \"movb %%$result->{register}, %\[$result->{name}\]\\n\"\n|;
+ print qq| \"movb %%$result->{register}, %$result->{argnum}\\n\"\n|;
}
elsif ($result->{type} eq "r16")
- {
- print qq| \"movw %%$result->{register}, %\[$result->{name}\]\\n\"\n|;
- }
+ {
+ print qq| \"movw %%$result->{register}, %$result->{argnum}\\n\"\n|;
+ }
elsif ($result->{type} eq "r32")
- {
- print qq| \"movl %%$result->{register}, %\[$result->{name}\]\\n\"\n|;
- }
+ {
+ print qq| \"movl %%$result->{register}, %$result->{argnum}\\n\"\n|;
+ }
elsif ($result->{type} eq "mm")
- {
- print qq| \"movq %%$result->{register}, %\[$result->{name}\]\\n\"\n|;
- }
+ {
+ print qq| \"movq %%$result->{register}, %$result->{argnum}\\n\"\n|;
+ }
elsif ($result->{type} eq "xmm")
{
- print qq| \"movlps %%$result->{register}, 0%\[$result->{name}\]\\n\"\n|;
- print qq| \"movhps %%$result->{register}, 8%\[$result->{name}\]\\n\"\n|;
+ print qq| \"movlps %%$result->{register}, 0%$result->{argnum}\\n\"\n|;
+ print qq| \"movhps %%$result->{register}, 8%$result->{argnum}\\n\"\n|;
}
elsif ($result->{type} eq "eflags")
- {
- print qq| \"pushfl\\n\"\n|;
- print qq| \"popl %\[$result->{name}\]\\n\"\n|;
+ {
+ print qq| \"pushfl\\n\"\n|;
+ print qq| \"popl %$result->{argnum}\\n\"\n|;
}
}
- print qq| \"frstor %\[state\]\\n\"\n|;
+ print qq| \"frstor %$stateargnum\\n\"\n|;
print qq| :|;
@@ -528,6 +556,6 @@
{
if ($result->{type} =~ /^(m(8|16|32|64|128)|eflags)$/)
- {
- print qq|$prefix\[$result->{name}\] \"=m\" \($result->{name}\)|;
+ {
+ print qq|$prefix\"=m\" \($result->{name}\)|;
$prefix = ", ";
}
@@ -542,5 +570,5 @@
if (defined($arg->{name}))
{
- print qq|$prefix\[$arg->{name}\] \"m\" \($arg->{name}\)|;
+ print qq|$prefix\"m\" \($arg->{name}\)|;
$prefix = ", ";
}
@@ -551,15 +579,15 @@
if ($result->{type} =~ /^(r(8|16|32)|mm|xmm)$/)
{
- print qq|$prefix\[$result->{name}\] \"m\" \($result->{name}\)|;
+ print qq|$prefix\"m\" \($result->{name}\)|;
$prefix = ", ";
}
}
- print qq|$prefix\[state\] \"m\" \(state[0]\)\n|;
+ print qq|$prefix\"m\" \(state[0]\)\n|;
$prefix = " : ";
foreach my $arg (@presets, @args)
- {
+ {
if ($arg->{register})
{
@@ -586,28 +614,28 @@
if ($type eq "eflags")
- {
+ {
print qq|${prefix}\($result->{name}.ud[0] & $values[0]UL\) == $values[1]UL|;
- }
- else
- {
- foreach my $value (0 .. $#values)
+ }
+ else
{
- if ($subtype eq "ps")
+ foreach my $value (0 .. $#values)
{
+ 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
- {
+ }
+ else
+ {
print qq|${prefix}$result->{name}.$subtype\[$value\] == $values[$value]$suffix|;
+ }
+
+ $prefix = " && ";
}
-
- $prefix = " && ";
}
- }
-
+
$prefix = " &&\n ";
}
@@ -629,16 +657,16 @@
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|;
- }
- else
- {
- foreach my $value (0 .. $#values)
+ }
+ else
{
+ 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|;
|