X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=support%2Fregression%2Ftests%2Flibmullong.c;h=2445c4f39e7245dc652edc156562f9b09af8f7a0;hb=90bdb43b342189fcb94a398855d43f3f47f96738;hp=08523bb84dfb16c6f61da0cf77aa62f3958b8b92;hpb=4e21292c95e90105383519e6a1b0a7d5ed749d70;p=fw%2Fsdcc diff --git a/support/regression/tests/libmullong.c b/support/regression/tests/libmullong.c index 08523bb8..2445c4f3 100644 --- a/support/regression/tests/libmullong.c +++ b/support/regression/tests/libmullong.c @@ -7,59 +7,98 @@ #define type_{type} #if defined(PORT_HOST) -# if defined(type_c) +# include "sdccconf.h" +# define mullong(a,b) mullong_wrapper(a,b) +# if defined(type_c) && !defined(WORDS_BIGENDIAN) # define _SDCC_NO_ASM_LIB_FUNCS 1 # define near # define long int -# include "../../../../../device/lib/_mullong.c" -# else -# define _mullong(a,b) (a*b) +# include "device/lib/_mullong.c" # endif #else # if defined(type_c) # define _SDCC_NO_ASM_LIB_FUNCS 1 # endif -# include "../../../../../device/lib/_mullong.c" +# include "device/lib/_mullong.c" +# define mullong _mullong +#endif + +/* gcc 2.95.2 on usf-cf-x86-linux-1 (debian 2.2) has a bug with + * packing structs + */ +#if defined(PORT_HOST) + +#if defined(type_c) && !defined(WORDS_BIGENDIAN) +struct +{ + char c1; + short i; + char c2; +} pack_test; + +TYPE_TARGET_LONG +mullong_wrapper (TYPE_TARGET_LONG a, TYPE_TARGET_LONG b) +{ + if (sizeof(pack_test) == 4) + /* length of struct ok: use SDCC library */ + return _mullong (a, b); + else + { + /* buggy gcc: use generic multiplication */ + return a * b; + } +} + +#else + +TYPE_TARGET_LONG +mullong_wrapper (TYPE_TARGET_LONG a, TYPE_TARGET_LONG b) +{ + return a * b; +} + +#endif + #endif void testlibmullong(void) { - ASSERT(_mullong ( 0, 0) == 0); - ASSERT(_mullong ( 0x100, 0x100) == 0x10000); - ASSERT(_mullong (0x01020304, 3) == 0x0306090c); - ASSERT(_mullong ( 3, 0x01020304) == 0x0306090c); - ASSERT(_mullong (0x000000ff, 2) == 0x000001fe); - ASSERT(_mullong ( 2, 0x000000ff) == 0x000001fe); - ASSERT(_mullong (0x00007fff, 4) == 0x0001fffc); - ASSERT(_mullong ( 4, 0x00007fff) == 0x0001fffc); - ASSERT(_mullong (0x003fffff, 8) == 0x01fffff8); - ASSERT(_mullong ( 8, 0x003fffff) == 0x01fffff8); + ASSERT(mullong ( 0, 0) == 0); + ASSERT(mullong ( 0x100, 0x100) == 0x10000); + ASSERT(mullong (0x01020304, 3) == 0x0306090c); + ASSERT(mullong ( 3, 0x01020304) == 0x0306090c); + ASSERT(mullong (0x000000ff, 2) == 0x000001fe); + ASSERT(mullong ( 2, 0x000000ff) == 0x000001fe); + ASSERT(mullong (0x00007fff, 4) == 0x0001fffc); + ASSERT(mullong ( 4, 0x00007fff) == 0x0001fffc); + ASSERT(mullong (0x003fffff, 8) == 0x01fffff8); + ASSERT(mullong ( 8, 0x003fffff) == 0x01fffff8); - ASSERT(_mullong ( 0x33, 0x34) == 0x00000a5c); - ASSERT(_mullong ( 0x34, 0x33) == 0x00000a5c); - ASSERT(_mullong ( 0x3334, 0x3536) == 0x0aa490f8); - ASSERT(_mullong ( 0x3536, 0x3334) == 0x0aa490f8); - ASSERT(_mullong ( 0x333435, 0x363738) == 0x0e98ce98); - ASSERT(_mullong ( 0x363738, 0x333435) == 0x0e98ce98); - ASSERT(_mullong (0x33343536, 0x3738393a) == 0x777d143c); - ASSERT(_mullong (0x3738393a, 0x33343536) == 0x777d143c); + ASSERT(mullong ( 0x33, 0x34) == 0x00000a5c); + ASSERT(mullong ( 0x34, 0x33) == 0x00000a5c); + ASSERT(mullong ( 0x3334, 0x3536) == 0x0aa490f8); + ASSERT(mullong ( 0x3536, 0x3334) == 0x0aa490f8); + ASSERT(mullong ( 0x333435, 0x363738) == 0x0e98ce98); + ASSERT(mullong ( 0x363738, 0x333435) == 0x0e98ce98); + ASSERT(mullong (0x33343536, 0x3738393a) == 0x777d143c); + ASSERT(mullong (0x3738393a, 0x33343536) == 0x777d143c); - ASSERT(_mullong ( 0xff, 0xfe) == 0x0000fd02); - ASSERT(_mullong ( 0xfe, 0xff) == 0x0000fd02); - ASSERT(_mullong ( 0xfffe, 0xfdfc) == 0xfdfa0408); - ASSERT(_mullong ( 0xfdfc, 0xfffe) == 0xfdfa0408); - ASSERT(_mullong ( 0xfffefd, 0xfcfbfa) == 0xfa0d1212); - ASSERT(_mullong ( 0xfcfbfa, 0xfffefd) == 0xfa0d1212); - ASSERT(_mullong (0xfffefdfc, 0xfbfaf9f8) == 0x20282820); - ASSERT(_mullong (0xfbfaf9f8, 0xfffefdfc) == 0x20282820); + ASSERT(mullong ( 0xff, 0xfe) == 0x0000fd02); + ASSERT(mullong ( 0xfe, 0xff) == 0x0000fd02); + ASSERT(mullong ( 0xfffe, 0xfdfc) == 0xfdfa0408); + ASSERT(mullong ( 0xfdfc, 0xfffe) == 0xfdfa0408); + ASSERT(mullong ( 0xfffefd, 0xfcfbfa) == 0xfa0d1212); + ASSERT(mullong ( 0xfcfbfa, 0xfffefd) == 0xfa0d1212); + ASSERT(mullong (0xfffefdfc, 0xfbfaf9f8) == 0x20282820); + ASSERT(mullong (0xfbfaf9f8, 0xfffefdfc) == 0x20282820); - ASSERT(_mullong (0xff000000, 0xff000000) == 0); - ASSERT(_mullong (0xffff0000, 0xffff0000) == 0); - ASSERT(_mullong (0xfffffe00, 0xfffffd00) == 0x00060000); - ASSERT(_mullong (0xfffffd00, 0xfffffe00) == 0x00060000); - ASSERT(_mullong (0xfffffefd, 0xfffffcfb) == 0x00030e0f); - ASSERT(_mullong (0xfffffcfb, 0xfffffefd) == 0x00030e0f); + ASSERT(mullong (0xff000000, 0xff000000) == 0); + ASSERT(mullong (0xffff0000, 0xffff0000) == 0); + ASSERT(mullong (0xfffffe00, 0xfffffd00) == 0x00060000); + ASSERT(mullong (0xfffffd00, 0xfffffe00) == 0x00060000); + ASSERT(mullong (0xfffffefd, 0xfffffcfb) == 0x00030e0f); + ASSERT(mullong (0xfffffcfb, 0xfffffefd) == 0x00030e0f); - ASSERT(_mullong (0xffffffff, 0xffffffff) == 1); + ASSERT(mullong (0xffffffff, 0xffffffff) == 1); }