Build failure on alpha

Tagged:
Project:GNU Smalltalk
Component:Testsuite
Category:bug
Priority:normal
Assigned:Unassigned
Status:invalid
Description

Hello,

gst 2.95h floatmath.st fails on alpha:

#                             -*- compilation -*-
8. testsuite.at:34: testing ...
{ (cd /home/tgg/smalltalk-2.95h/tests && gst -I /home/tgg/smalltalk-2.95h/gst.im -r floatmath.st 2>&1); echo exit 0 > retcode; } | tr -d '\r' | tee stdout; . retcode
./testsuite.at:34: { (cd $abs_srcdir && gst $image_path -r floatmath.st 2>&1); echo exit $? > retcode; } | tr -d '\r' | tee stdout; . retcode
--- expout	2008-01-06 13:05:47.000000000 +0000
+++ /home/tgg/smalltalk-2.95h/tests/testsuite.dir/at-stdout	2008-01-06 13:05:54.000000000 +0000
@@ -232,7 +232,7 @@
 returned value is 17.7675
 
 Execution begins...
-true->0.12345
+true->0.1234499999999999
 returned value is 0.123450
 
 Execution begins...
@@ -244,11 +244,11 @@
 returned value is 1.23450e-09
 
 Execution begins...
-true->0.83205029433784
+true->0.8320502943378399
 returned value is 0.832050
 
 Execution begins...
-true->0.832050294337844
+true->0.8320502943378439
 returned value is 0.832050
 
 Execution begins...
@@ -287,16 +287,5 @@
 true
 true
 true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-returned value is FloatE
+ error: halt encountered
+returned value is nil
8. testsuite.at:34: 8. floatmath.st (testsuite.at:34): FAILED (testsuite.at:34)

Updates

#1 submitted by Paolo Bonzini on Sun, 01/06/2008 - 16:46

Could you try building gst with CFLAGS="-O2 -g -mieee"? Thanks.

#2 submitted by Thomas Girard on Sun, 01/06/2008 - 17:14

It fails with different values:

#                             -*- compilation -*-
8. testsuite.at:34: testing ...
{ (cd /home/tgg/smalltalk-2.95h/tests && gst -I /home/tgg/smalltalk-2.95h/gst.im -r floatmath.st 2;&1); echo exit 0 ; retcode; } | tr -d '\r' | tee stdout; . retcode
./testsuite.at:34: { (cd $abs_srcdir && gst $image_path -r floatmath.st 2;&1); echo exit $? ; retcode; } | tr -d '\r' | tee stdout; . retcode
--- expout        2008-01-06 17:03:23.000000000 +0000

+++  /home/tgg/smalltalk-2.95h/tests/testsuite.dir/at-stdout        2008-01-06 17:03:31.000000000 +0000

@@ -244,19 +244,19 @@
 returned value is 1.23450e-09
 
 Execution begins...
-true-;0.83205029433784

+ true-;0.8320500559192609

 returned value is 0.832050
 
 Execution begins...
-true-;0.832050294337844

+ true-;0.8320500559192649

 returned value is 0.832050
 
 Execution begins...
-true-;0.55470019622523

+ true-;0.5546999578066509

 returned value is 0.554700
 
 Execution begins...
-true-;0.554700196225229

+ true-;0.5546999578066499

 returned value is 0.554700
 
 Execution begins...
@@ -287,16 +287,5 @@
 true
 true
 true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-returned value is FloatE

+  error: halt encountered

+returned value is nil
8. testsuite.at:34: 8. floatmath.st (testsuite.at:34): FAILED (testsuite.at:34)

(Please note that this build does not use libgmp - it's not installed, and I can't do it myself.)

#3 submitted by Paolo Bonzini on Sun, 01/06/2008 - 17:51

The first part of the failure is the same for ia64, so I'll prepare a patch to enable -mieee on alpha. This however is not enough, can you try this?

       | p |
       p := 1 bitShift: FloatE precision - 1.
       p printNl.
       "Should be p+1"
       (FloatE coerce: p+0+(3/4)) asExactFraction printNl.
       (FloatE coerce: p+1+(1/4)) asExactFraction printNl.

I'll try the same on a machine without GMP. If it fails there, I'll close this as a dup of the ia64 build failure.

#4 submitted by Thomas Girard on Sun, 01/06/2008 - 19:08

On alpha, without GMP, with -mieee (and devo--2.2--patch-558 applied):

st> | p |
st> p := 1 bitShift: FloatE precision - 1.
8388608
st> p printNl.
8388608
8388608
st> "Should be p+1"
st> (FloatE coerce: p+0+(3/4)) asExactFraction printNl.
8388609
8388609
st> (FloatE coerce: p+1+(1/4)) asExactFraction printNl.
8388609
8388609

Likewise without -mieee.

But:

st> (FloatE emin - FloatE precision - 1 to: FloatE emax - 1) allSatisfy: [:i | p := (FloatE coerce: 1) timesTwoPower: i. (FloatE coerce: p asExactFraction) = p]
false

#5 submitted by Thomas Girard on Sun, 01/06/2008 - 20:04

st> (FloatE emin - FloatE precision - 1 to: FloatE emax - 1) collect: [:i | p := (FloatE coerce: 1) timesTwoPower: i. (FloatE coerce: p asExactFraction) = p]"Global garbage collection... done"
(true false false false false false false false false false false false false false false false false false false false false false false false true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true )

where emin is -125, precision is 24 and emax is 128. The first failing is -149:

st> p:= (FloatE coerce: 1) timesTwoPower: -149.
2.6524948e-315
st> p asExactFraction
"Global garbage collection... done"
1/377003575316277553052632783947358479815640765734281611362288441560101396530857955835685848633641608981764089063400052322800846281248691448694119974860434438887084693231743502178167752441192448774799271819130974018130465379775860716808779827596916922071594850183201524526501846714374614008118077197384100897810808832
st> FloatE coerce: p asExactFraction
0.0

#6 submitted by Paolo Bonzini on Mon, 01/07/2008 - 08:58

In "IEEE Trap Mode" (-mieee) the cvtsts instruction is generated the trap handler is called when the S_floating denormal value. This should create the corresponding T_floating finite value by adding 896 to the exponent and normalizing.

Can you look at http://lists.debian.org/debian-alpha/2007/08/msg00059.html and see if it helps please?

#7 submitted by Paolo Bonzini on Mon, 01/07/2008 - 08:59

In "IEEE Trap Mode" (-mieee) the cvtsts instruction is generated the trap handler is called when the S_floating denormal value. This should create the corresponding T_floating finite value by adding 896 to the exponent and normalizing.

Can you look at http://lists.debian.org/debian-alpha/2007/08/msg00059.html and see if it helps please?

#8 submitted by Paolo Bonzini on Mon, 01/07/2008 - 11:38

The remaining failure (printing 0.83205029433784) should be a bug in lrint (it is on ia64 at least) and I fixed it in patch-688. If it is, this program

#define _GNU_SOURCE 1
#include 
double d = 14988885582133630.0; 
int main()
{
  printf ("%.18g\n", d);
  long int l = lrint (d);
  printf ("%ld\n", l);
  printf ("%ld\n", (long int) d);
}

should not print three times the same number. If it prints the same number, patch-688 will not fix Alpha.

#9 submitted by Thomas Girard on Mon, 01/07/2008 - 12:17

Here's the machine config:

$ cat /proc/cpuinfo
cat /proc/cpuinfo
cpu                     : Alpha
cpu model               : EV68CB
cpu variation           : 7
cpu revision            : 0
cpu serial number       : JA30502089
system type             : Titan
system variation        : Privateer
system revision         : 0
system serial number    : AY31001636
cycle frequency [Hz]    : 1250000000
timer frequency [Hz]    : 1024.00
page size [bytes]       : 8192
phys. address bits      : 44
max. addr. space #      : 255
BogoMIPS                : 2492.28
kernel unaligned acc    : 0 (pc=0,va=0)
user unaligned acc      : 105 (pc=20000008040,va=1200143c9)
platform string         : AlphaServer ES45 Model 3B
cpus detected           : 4
cpus active             : 4
cpu active mask         : 000000000000000f
L1 Icache               : 64K, 2-way, 64b line
L1 Dcache               : 64K, 2-way, 64b line
L2 cache                : n/a
L3 cache                : n/a

Compiling an running the program (named 688.c):

$ gcc -o 688 -lm 688.c
$ ./688
14988885582133630
14988881287166334
14988885582133630

So it seems your patch will also fix this. I'll report this lrint bug to the Debian glibc maintainers.

#10 submitted by Thomas Girard on Sun, 01/13/2008 - 13:08

I've just checked on a Debian alpha machine that MATHEMU is enabled in the kernel. But the 008 test still fails.

Here's the testsuite.log on an 2.6.18 MATHEMU enabled Debian/sid alpha box:

#                             -*- compilation -*-
8. testsuite.at:34: testing ...
{ (cd /home/tgg/smalltalk-3.0/tests && gst -I /home/tgg/smalltalk-3.0/gst.im -r floatmath.st 2>&1); echo exit 0 > retcode; } | tr -d '\r' | tee stdout; . retcode
./testsuite.at:34: { (cd $abs_srcdir && gst $image_path -r floatmath.st 2>&1); echo exit $? > retcode; } | tr -d '\r' | tee stdout; . retcode
--- expout        2008-01-12 17:27:19.000000000 +0000

+++  /home/tgg/smalltalk-3.0/tests/testsuite.dir/at-stdout        2008-01-12 17:27:26.000000000 +0000

@@ -232,7 +232,7 @@
 returned value is 17.7675
 
 Execution begins...
-true->0.12345

+ true->0.1234499999999999

 returned value is 0.123450
 
 Execution begins...
@@ -244,11 +244,11 @@
 returned value is 1.23450e-09
 
 Execution begins...
-true->0.83205029433784

+ true->0.8320502943378399

 returned value is 0.832050
 
 Execution begins...
-true->0.832050294337844

+ true->0.8320502943378439

 returned value is 0.832050
 
 Execution begins...
@@ -287,16 +287,5 @@
 true
 true
 true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-true
-returned value is FloatE

+  error: halt encountered

+returned value is nil
8. testsuite.at:34: 8. floatmath.st (testsuite.at:34): FAILED (testsuite.at:34)

#11 submitted by Paolo Bonzini on Fri, 01/18/2008 - 09:38
Status:active» invalid

User login