/*-------------------------------------------------------------------------
- _mulint.c :- routine for (unsigned) int (16 bit) multiplication
+ _mulint.c :- routine for (unsigned) int (16 bit) multiplication
Written By - Sandeep Dutta . sandeep.dutta@usa.net (1999)
under the terms of the GNU Library General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
-
+
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Library General Public License for more details.
-
+
You should have received a copy of the GNU Library General Public License
along with this program; if not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
+
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
+ what you give them. Help stamp out software-hoarding!
-------------------------------------------------------------------------*/
/* Signed and unsigned multiplication are the same - as long as the output
(char)(lsb_a*msb_b)<<8
*/
- _asm
+ _asm
mov r2,dph ; msb_a
mov r3,dpl ; lsb_a
mov dph,a ; 1
ret
-
+
#endif // SDCC_STACK_AUTO
_endasm ;
{
#ifdef SDCC_MODEL_LARGE // still needed for large + stack-auto
union uu xdata *x;
- union uu xdata *y;
+ union uu xdata *y;
union uu t;
x = (union uu xdata *)&a;
y = (union uu xdata *)&b;
#else
register union uu *x;
- register union uu *y;
+ register union uu *y;
union uu t;
x = (union uu *)&a;
y = (union uu *)&b;
t.s.hi += (x->s.lo * y->s.hi) + (x->s.hi * y->s.lo);
return t.t;
-}
+}
int
_mulsint (int a, int b) // obsolete