Quantcast
Viewing all articles
Browse latest Browse all 22093

Floating Point Multiply Bug Using gcc 2.7.0 on Amiga with 68881 - Any Fixes/Workarounds?

For the heck of it, I decided to see if a program I started writing on an Amiga many years ago and much further developed on other machines would still compile and run on an Amiga (after being developed on other machines). I originally used Lattice C because that's what I used before. But the 68881 support in Lattice is VERY buggy. So I decided to try gcc. I think the most recent version of gcc for Amiga is 2.7.0 (so I can't upgrade). It's worked rather well except for one bug in 68881 support: When multiplying any negative number by zero, the result is always:

1.:00000

when printed out (colon is NOT a typo). BTW, if you set x to zero, then print out, it's 0.00000 like it should be.

Here's a sample program to test the bug, it doesn't matter which variable is 0 and which is negative, and if the non-zero value is positive, it works fine.

#include <stdio.h>
#include <math.h>

main()
{
    float x,a,b;

    a=-10.0;
    b=0.0;
    x=a*b;
    printf("%f\n",x);
}

and it's compiled with: gcc -o tt -m68020 -m68881 tt.c -lm

Taking out -m68881 works fine (but of course, doesn't use the FPU) Taking out -lm and/or math.h makes no difference.

Does anyone know of a bug fix or workaround? Maybe a gcc command line argument? (would rather not have to do UGLY things like "if ((a<0)&&(b==0))")

BTW, since I don't have a working Amiga anymore, I've had to use an emulator. If you want to see what I've been doing on this project (using Lattice C version), you can view my video at:

https://www.youtube.com/watch?v=x8O-qYQvP4M

(Amiga part starts at 10:07)

Thanks for any help.


Viewing all articles
Browse latest Browse all 22093

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>