|
From: <sv...@va...> - 2005-05-11 10:42:55
|
Author: sewardj
Date: 2005-05-11 11:42:49 +0100 (Wed, 11 May 2005)
New Revision: 3657
Modified:
trunk/none/tests/amd64/gen_insn_test.pl
Log:
* gcc-3.3.4 seems to generate non-working code for eq_double: workaround
* fix wrong stack offset for comparisons involving %rflags
* (unused): sets of register names for reg numbers >=3D 8
Modified: trunk/none/tests/amd64/gen_insn_test.pl
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/none/tests/amd64/gen_insn_test.pl 2005-05-11 02:12:31 UTC (rev =
3656)
+++ trunk/none/tests/amd64/gen_insn_test.pl 2005-05-11 10:42:49 UTC (rev =
3657)
@@ -79,6 +79,17 @@
{ r8 =3D> "dh" }
);
=20
+#our @IntRegs =3D (
+# { r8 =3D> "r8b", r16 =3D> "r8w", r32 =3D> "r8d", r64 =3D=
> "r8" },
+# { r8 =3D> "r9b", r16 =3D> "r9w", r32 =3D> "r9d", r64 =3D=
> "r9" },
+# { r8 =3D> "r10b", r16 =3D> "r10w", r32 =3D> "r10d", r64=
=3D> "r10" },
+# { r8 =3D> "r11b", r16 =3D> "r11w", r32 =3D> "r11d", r64=
=3D> "r11" },
+# { r8 =3D> "ah" },
+# { r8 =3D> "bh" },
+# { r8 =3D> "ch" },
+# { r8 =3D> "dh" }
+# );
+
print <<EOF;
#include <math.h>
#include <setjmp.h>
@@ -144,13 +155,15 @@
__attribute__((unused))
static int eq_float(float f1, float f2)
{
- return f1 =3D=3D f2 || fabsf(f1 - f2) < fabsf(f1) * 1.5 * powf(2,-12)=
;
+ /* return f1 =3D=3D f2 || fabsf(f1 - f2) < fabsf(f1) * 1.5 * powf(2,-=
12); */
+ return f1 =3D=3D f2 || fabsf(f1 - f2) < fabsf(f1) * 1.5 / 4096.0;
}
=20
__attribute__((unused))
static int eq_double(double d1, double d2)
{
- return d1 =3D=3D d2 || fabs(d1 - d2) < fabs(d1) * 1.5 * pow(2,-12);
+ /* return d1 =3D=3D d2 || fabs(d1 - d2) < fabs(d1) * 1.5 * pow(2,-12)=
; */
+ return d1 =3D=3D d2 || fabs(d1 - d2) < fabs(d1) * 1.5 / 4096.0;
}
=20
EOF
@@ -196,6 +209,7 @@
my @intregs =3D @IntRegs;
my @mmregs =3D map { "mm$_" } (6,7,0,1,2,3,4,5);
my @xmmregs =3D map { "xmm$_" } (4,5,0,1,2,3,6,7);
+# my @xmmregs =3D map { "xmm$_" } (12,13,8,9,10,11,14,15);
my @fpregs =3D map { "st$_" } (0 .. 7);
=20
my @presets;
@@ -695,7 +709,7 @@
{
print qq| \"pushfq\\n\"\n|;
print qq| \"andl \$$eflagsmask, (%%rsp)\\n\"\n| if defin=
ed($eflagsmask);
- print qq| \"andl \$0, 8(%%rsp)\\n\"\n| if defined($eflag=
smask);
+ print qq| \"andl \$0, 4(%%rsp)\\n\"\n| if defined($eflag=
smask);
print qq| \"orq \$$eflagsset, (%%rsp)\\n\"\n| if defined=
($eflagsset);
print qq| \"popfq\\n\"\n|;
}
|