Floating Point problems with Linux on the EST SBC8260
diekema_jon
diekema at bucks.si.com
Thu May 25 05:47:10 EST 2000
Floating Point problems with Linux on the EST SBC8260:
Questions:
- What is the state of floating point support with Linux on the
MPC8260?
- Does anybody have hard-float applications running on the MPC8260?
- I am looking for a floating point validation test suite written in
C. The test suite should start with the fundamentals and work out
from there.
Does anybody have any leads? This is what I have found so far:
1) TestFloat-2a
Package Overview for TestFloat Release 2a
John R. Hauser
1998 December 16
TestFloat is a program for testing that a floating-point implementation
conforms to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.
TestFloat is distributed in the form of C source code. The TestFloat
package actually provides two related programs:
-- The `testfloat' program tests a system's floating-point for conformance
to the IEC/IEEE Standard. This program uses the SoftFloat software
floating-point implementation as a basis for comparison.
-- The `testsoftfloat' program tests SoftFloat itself for conformance to
the IEC/IEEE Standard. These tests are performed by comparing against a
separate, slower software floating-point that is included in the TestFloat
package.
2) UCBTEST
UCBTEST is a suite of programs for testing certain difficult cases of
IEEE 754 floating-point arithmetic. Some of the difficult test cases are
obtained from number-theoretic algorithms developed by Turing Award winner
Prof. W. Kahan, Department of Electrical Engineering and Computer Science,
University of California, Berkeley, as part of ongoing research into test
methods for computer arithmetic.
Either TestFloat or UCBTEST will require some porting effort to run
on the PPC. I would like to work smarter rather than harder. I can't
even get the rights answers from printf, *, or /.
Environment:
Platform: EST SBC8260 w/ MPC8260 Rev A.1 running at 166 Mhz
Ethernet: 10 Mbs (SCC)
Linux kernel: 2.3.99-pre9
root filesystem (NFS mounted): MontaVista Hard Hat Linux version 1.1
Toolset: Denx Software CDK recompiled with gcc configured for
--with-cpu=603e and hard-float (i.e. no --nfp)
Application:
Note: The executable was statically linked to pull in the hard-float
C runtime libraries.
dell 403} cat z.c
#include "stdio.h"
double x, y, z;
main ()
{
x = 1234.33;
printf("x %lf (1234.33) 0x%08lX\n", x , x);
y = 4444.2;
printf("y %lf (4444.2) 0x%08lX\n", y , y);
z = x * y;
printf("z = x * y, %lf %lf %lf\n", x , y, z);
z = x / y;
printf("z = x / y, %lf %lf %lf\n", x , y, z);
}
dell 404} cat z.s
.file "z.c"
gcc2_compiled.:
.section ".rodata"
.align 2
.LC1:
.string "x %lf (1234.33) 0x%08lX\n"
.align 2
.LC3:
.string "y %lf (4444.2) 0x%08lX\n"
.align 2
.LC4:
.string "z = x * y, %lf %lf %lf\n"
.align 2
.LC5:
.string "z = x / y, %lf %lf %lf\n"
.align 3
.LC0:
.long 0x40934951
.long 0xeb851eb8
.align 3
.LC2:
.long 0x40b15c33
.long 0x33333333
.section ".text"
.align 2
.globl main
.type main, at function
main:
stwu 1,-16(1)
mflr 0
stw 31,12(1)
stw 0,20(1)
mr 31,1
lis 9,x at ha
lis 11,.LC0 at ha
lfd 0,.LC0 at l(11)
stfd 0,x at l(9)
lis 9,x at ha
lis 11,x at ha
lis 10,.LC1 at ha
la 3,.LC1 at l(10)
lfd 1,x at l(9)
lfd 2,x at l(11)
creqv 6,6,6
bl printf
lis 9,y at ha
lis 11,.LC2 at ha
lfd 0,.LC2 at l(11)
stfd 0,y at l(9)
lis 9,y at ha
lis 11,y at ha
lis 10,.LC3 at ha
la 3,.LC3 at l(10)
lfd 1,y at l(9)
lfd 2,y at l(11)
creqv 6,6,6
bl printf
lis 9,z at ha
lis 11,x at ha
lis 10,y at ha
lfd 0,x at l(11)
lfd 13,y at l(10)
fmul 0,0,13
stfd 0,z at l(9)
lis 9,x at ha
lis 11,y at ha
lis 10,z at ha
lis 8,.LC4 at ha
la 3,.LC4 at l(8)
lfd 1,x at l(9)
lfd 2,y at l(11)
lfd 3,z at l(10)
creqv 6,6,6
bl printf
lis 9,z at ha
lis 11,x at ha
lis 10,y at ha
lfd 0,x at l(11)
lfd 13,y at l(10)
fdiv 0,0,13
stfd 0,z at l(9)
lis 9,x at ha
lis 11,y at ha
lis 10,z at ha
lis 8,.LC5 at ha
la 3,.LC5 at l(8)
lfd 1,x at l(9)
lfd 2,y at l(11)
lfd 3,z at l(10)
creqv 6,6,6
bl printf
.L2:
lwz 11,0(1)
lwz 0,4(11)
mtlr 0
lwz 31,-4(11)
mr 1,11
blr
.Lfe1:
.size main,.Lfe1-main
.comm x,8,8
.comm y,8,8
.comm z,8,8
.ident "GCC: (GNU) 2.95.2 19991024 (release)"
On the target:
> ./a.out
x nan (1234.33) 0x00000000
y 0.000000 (4444.2) 0x1003FBCC
z = x * y, 0.000000 0.000000 0.000000
z = x / y, 0.000000 0.000000 0.000000
The expected results should look something like:
dell 420} ./a.out
x 1234.330000 (1234.33) 0xEB851EB8
y 4444.200000 (4444.2) 0x33333333
z = x * y, 1234.330000 4444.200000 5485609.386000
z = x / y, 1234.330000 4444.200000 0.277740
We aren't even close to reasonable answers yet.
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list