/************************************************************************/
/* This file contains the BCC compiler helper functions */
/* Support for integer arithmetic 
 * __idiv.o __idivu.o __imod.o __imodu.o __imul.o __isl.o __isr.o __isru.o
 */
#asm
	.text	! This is common to all.
	.even
#endasm

/************************************************************************/
/* Function idiv */

#ifdef L___idiv
#asm

| idiv.s
| idiv_ doesn`t preserve dx (returns remainder in it)

	.globl idiv_

idiv_:
	cwd
	idiv	bx
	ret
#endasm
#endif

/************************************************************************/
/* Function idivu */

#ifdef L___idivu
#asm

| idivu.s
| idiv_u doesn`t preserve dx (returns remainder in it)

	.globl idiv_u

idiv_u:
	xor	dx,dx
	div	bx
	ret
#endasm
#endif

/************************************************************************/
/* Function imod */

#ifdef L___imod
#asm

| imod.s
| imod doesn`t preserve dx (returns quotient in it)

	.globl imod

imod:
	cwd
	idiv	bx
	mov	ax,dx	
	ret
#endasm
#endif

/************************************************************************/
/* Function imodu */

#ifdef L___imodu
#asm

| imodu.s
| imodu doesn`t preserve dx (returns quotient in it)

	.globl imodu

imodu:
	xor	dx,dx
	div	bx
	mov	ax,dx		! instruction queue full so xchg slower
	ret
#endasm
#endif

/************************************************************************/
/* Function imul */

#ifdef L___imul
#asm

| imul.s
| imul_, imul_u don`t preserve dx

	.globl imul_
	.globl imul_u

imul_:
imul_u:
	imul	bx
	ret
#endasm
#endif

/************************************************************************/
/* Function isl */

#ifdef L___isl
#asm

| isl.s
| isl, islu don`t preserve cl

	.globl isl
	.globl islu

isl:
islu:
	mov	cl,bl
	shl	ax,cl
	ret
#endasm
#endif

/************************************************************************/
/* Function isr */

#ifdef L___isr
#asm

| isr.s
| isr doesn`t preserve cl

	.globl isr

isr:
	mov	cl,bl
	sar	ax,cl
	ret
#endasm
#endif

/************************************************************************/
/* Function isru */

#ifdef L___isru
#asm

| isru.s
| isru doesn`t preserve cl

	.globl isru

isru:
	mov	cl,bl
	shr	ax,cl
	ret
#endasm
#endif

