Haven't figured out the extent of the problem yet, part or all of it may
be double alignment.
Here is (first) ARM output, then linux output.
pavilion: {1254} rsh ipaq /temp/f
Yow 16.000000 2.000000 -0.000000
a 00 00 00 00 00 00 30 40 00 00 00 00 00 00 00 00
b 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00
c 00 00 10 20 01 01 30 80 00 00 00 00 00 00 00 00
Yow 0.000000 0.000000 0.000000 .. 0.000000
a 00 00 80 41 00 00 00 00 00 00 00 00 00 00 00 00
b 00 00 80 40 00 00 00 00 00 00 00 00 00 00 00 00
c 00 00 80 42 00 00 00 00 00 00 00 00 00 00 00 00
d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
pavilion: {1255} ./f
Yow 16.000000 2.000000 32.000000
a 00 00 00 00 00 00 30 40 00 00 00 00 00 00 00 00
b 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00
c 00 00 00 00 00 00 40 40 00 00 00 00 00 00 00 00
Yow 16.000000 4.000000 64.000000 .. 64.000000
a 00 00 80 41 00 00 00 00 00 00 00 00 00 00 00 00
b 00 00 80 40 00 00 00 00 00 00 00 00 00 00 00 00
c 00 00 80 42 00 00 00 00 00 00 00 00 00 00 00 00
d 00 00 00 00 00 00 50 40 00 00 00 00 00 00 00 00
Source is attached.
The first block of output handles double, the second one handles float.
I think this shows :
- the float multiplication works
(same output as on x86/linux : 00 00 80 42)
- the double multiplication fails (different output)
- printing fails for float (but that's argument passing so it becomes
double) but mysteriously not for doubles
Am I looking at the wrong thing ?
Ideas ?
Danny
On Mon, 2009-05-25 at 11:08 +0200, Vincent R. wrote:
> On Fri, 22 May 2009 17:12:08 +0200, Danny Backx <[email protected]>
> wrote:
> > Floating point doesn't work. Does anyone know how this is supposed to ?
> >
> > Danny
> >
> Hi,
>
> How do you know it doesn't work ? What is your testcase ?
>
>
> ------------------------------------------------------------------------------
> Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
> is a gathering of tech-side developers & brand creativity professionals. Meet
> the minds behind Google Creative Lab, Visual Complexity, Processing, &
> iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
> Group, R/GA, & Big Spaceship. http://www.creativitycat.com
> _______________________________________________
> Cegcc-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/cegcc-devel
>
--
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 16
union f {
unsigned char bits[SIZE];
double d;
float f;
} a, b, c, d;
void doit(char *s, union f *p)
{
int i;
printf("%s\t", s);
for (i=0; i<SIZE; i++) {
printf("%02X ", p->bits[i]);
}
printf("\n");
}
main()
{
memset(&a, 0, sizeof(a));
memset(&b, 0, sizeof(b));
memset(&c, 0, sizeof(c));
#if 1
a.d = 16;
b.d = 2;
#else
a.d = 234;
b.d = 8;
#endif
c.d = a.d * b.d;
printf("Yow %f", a.d);
printf(" %f", b.d);
printf(" %f\n", c.d);
doit("a", &a);
doit("b", &b);
doit("c", &c);
memset(&a, 0, sizeof(a));
memset(&b, 0, sizeof(b));
memset(&c, 0, sizeof(c));
memset(&d, 0, sizeof(d));
a.f = 16;
b.f = 4;
c.f = a.f * b.f;
d.d = c.f;
printf("Yow %f", a.f);
printf(" %f", b.f);
printf(" %f", c.f);
printf(" .. %f\n", d.d);
doit("a", &a);
doit("b", &b);
doit("c", &c);
doit("d", &d);
#if 0
printf("Offset(f) : %d, size %d\n", (int)((void *)&a.f - (void *)&a), sizeof(a.f));
printf("Offset(d) : %d, size %d\n", (int)((void *)&a.d - (void *)&a), sizeof(a.d));
#endif
exit(0);
}
------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com
_______________________________________________
Cegcc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cegcc-devel