From 006225dbd177abecf24dcc6b1e7c0df8c0b5a9c2 Mon Sep 17 00:00:00 2001 From: johanknol Date: Wed, 31 Jan 2001 14:43:06 +0000 Subject: [PATCH] Temporary (?) fix for char calculation in int space git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@551 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- device/lib/_muluint.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/device/lib/_muluint.c b/device/lib/_muluint.c index b50583f1..fdb261a6 100644 --- a/device/lib/_muluint.c +++ b/device/lib/_muluint.c @@ -23,15 +23,44 @@ 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 -- 2.47.2