* support/regression/valdiag/tests/switch.c,
[fw/sdcc] / support / regression / tests / libmullong.c
index 61ead68b4212cda24ecc0559781fb0b96c77aa61..4ab6ee755533ac32402668a9f921a2ebdb3ae3e2 100644 (file)
@@ -7,45 +7,65 @@
 #define type_{type}
 
 #if defined(PORT_HOST)
-#  include "../../../../../sdccconf.h"
+#  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"
-#    define mullong(a,b) mullong_wrapper(a,b)
-#  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) && defined(type_c) && !defined(WORDS_BIGENDIAN)
+#if defined(PORT_HOST)
+
+#define TYPE_TARGET_CHAR  TYPE_BYTE
+#define TYPE_TARGET_INT   TYPE_WORD
+#define TYPE_TARGET_LONG  TYPE_DWORD
+#define TYPE_TARGET_UCHAR TYPE_UBYTE
+#define TYPE_TARGET_UINT  TYPE_UWORD
+#define TYPE_TARGET_ULONG TYPE_UDWORD
+
+#if defined(type_c) && !defined(WORDS_BIGENDIAN)
 struct
 {
   char c1;
   short i;
   char c2;
 } pack_test;
-       
-long
-mullong_wrapper (long a, long b)
+
+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 */
+    {
+      /* 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