diff options
author | Peter Wemm <peter@FreeBSD.org> | 1996-09-18 05:35:50 +0000 |
---|---|---|
committer | Peter Wemm <peter@FreeBSD.org> | 1996-09-18 05:35:50 +0000 |
commit | a4cd5630b060871c42e59f7b95cf1e823c417db6 (patch) | |
tree | 5b7ea73fc49c8998d9dc87d3eeff5b96439e6856 /contrib/gcc/libgcc1-test.c | |
download | src-a4cd5630b060871c42e59f7b95cf1e823c417db6.tar.gz src-a4cd5630b060871c42e59f7b95cf1e823c417db6.zip |
Import of unmodified (but trimmed) gcc-2.7.2. The bigger parts of the
non-i386, non-unix, and generatable files have been trimmed, but can easily
be added in later if needed.
gcc-2.7.2.1 will follow shortly, it's a very small delta to this and it's
handy to have both available for reference for such little cost.
The freebsd-specific changes will then be committed, and once the dust has
settled, the bmakefiles will be committed to use this code.
Notes
Notes:
svn path=/vendor/gcc/dist/; revision=18334
Diffstat (limited to 'contrib/gcc/libgcc1-test.c')
-rw-r--r-- | contrib/gcc/libgcc1-test.c | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/contrib/gcc/libgcc1-test.c b/contrib/gcc/libgcc1-test.c new file mode 100644 index 000000000000..392d4fc7e9c2 --- /dev/null +++ b/contrib/gcc/libgcc1-test.c @@ -0,0 +1,100 @@ +/* This small function uses all the arithmetic operators that + libgcc1.c can handle. If you can link it, then + you have provided replacements for all the libgcc1.c functions that + your target machine needs. */ + +int foo (); +double dfoo (); + +/* We don't want __main here because that can drag in atexit (among other + things) which won't necessarily exist yet. */ + +main_without__main () +{ + int a = foo (), b = foo (); + unsigned int au = foo (), bu = foo (); + float af = dfoo (), bf = dfoo (); + double ad = dfoo (), bd = dfoo (); + + discard (a * b); + discard (a / b); + discard (a % b); + + discard (au / bu); + discard (au % bu); + + discard (a >> b); + discard (a << b); + + discard (au >> bu); + discard (au << bu); + + ddiscard (ad + bd); + ddiscard (ad - bd); + ddiscard (ad * bd); + ddiscard (ad / bd); + ddiscard (-ad); + + ddiscard (af + bf); + ddiscard (af - bf); + ddiscard (af * bf); + ddiscard (af / bf); + ddiscard (-af); + + discard ((int) ad); + discard ((int) af); + + ddiscard ((double) a); + ddiscard ((float) a); + ddiscard ((float) ad); + + discard (ad == bd); + discard (ad < bd); + discard (ad > bd); + discard (ad != bd); + discard (ad <= bd); + discard (ad >= bd); + + discard (af == bf); + discard (af < bf); + discard (af > bf); + discard (af != bf); + discard (af <= bf); + discard (af >= bf); + + return 0; +} + +discard (x) + int x; +{} + +ddiscard (x) + double x; +{} + +foo () +{ + static int table[] = {20, 69, 4, 12}; + static int idx; + + return table[idx++]; +} + +double +dfoo () +{ + static double table[] = {20.4, 69.96, 4.4, 202.202}; + static int idx; + + return table[idx++]; +} + +/* Provide functions that some versions of the linker use to default + the start address if -e symbol is not used, to avoid the warning + message saying the start address is defaulted. */ +extern void start() __asm__("start"); +extern void _start() __asm__("_start"); + +void start() {} +void _start() {} |