Temporary (?) fix for char calculation in int space
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 31 Jan 2001 14:43:06 +0000 (14:43 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 31 Jan 2001 14:43:06 +0000 (14:43 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@551 4a8a32a2-be11-0410-ad9d-d568d2c75423

device/lib/_muluint.c

index b50583f1d0674ffdca42dbebf74edb8a1ef0d455..fdb261a666791c2360ffc06164c98d269b361d3f 100644 (file)
    what you give them.   Help stamp out software-hoarding!  
 -------------------------------------------------------------------------*/
 
+#ifdef SDCC_MODEL_FLAT24
+
+unsigned int _muluint (unsigned int a, unsigned int b) 
+{
+  a*b; // hush the compiler
+
+  // muluint=(int)(lsb_a*lsb_b) + (char)(msb_a*msb_b)<<8
+  //          ^^^
+
+  _asm 
+    push dph ; msb_a
+    mov b,dpl ; lsb_a
+    mov dptr,#__muluint_PARM_2
+    movx a,@dptr ; lsb_b
+    mul ab
+    mov r0,a
+    mov r1,b
+    pop b ; msb_a
+    inc dptr
+    movx a,@dptr ; msb_b
+    mul ab
+    add a,r1
+    mov dph,a
+    mov dpl,r0
+    ret
+  _endasm;
+}
+
+#else
+
 union uu {
        struct { unsigned short lo,hi ;} s;
         unsigned int t;
 } ;
 
-
 unsigned int _muluint (unsigned int a, unsigned int b) 
 {
-#if defined(SDCC_MODEL_LARGE) || defined (SDCC_MODEL_FLAT24)
+#ifdef SDCC_MODEL_LARGE
        union uu _xdata *x;
        union uu _xdata *y; 
        union uu t;
@@ -50,3 +79,5 @@ unsigned int _muluint (unsigned int a, unsigned int b)
 
        return t.t;
 } 
+
+#endif