static void
_divuint_dummy (void) _naked
{
- _asm
+ __asm
- .globl __divuint
+ .globl __divuint
- __divuint:
+ __divuint:
- #define count r2
- #define reste_l r3
- #define reste_h r4
- #define al dpl
- #define ah dph
+ #define count r2
+ #define reste_l r3
+ #define reste_h r4
+ #define al dpl
+ #define ah dph
#if defined(SDCC_STACK_AUTO) && !defined(SDCC_PARMS_IN_BANK1)
- ar0 = 0 ; BUG register set is not considered
- ar1 = 1
+ ar0 = 0 ; BUG register set is not considered
+ ar1 = 1
- .globl __divint
+ .globl __divint
- mov a,sp
- add a,#-2 ; 2 bytes return address
- mov r0,a ; r0 points to bh
- mov ar1,@r0 ; load bh
- dec r0
- mov ar0,@r0 ; load bl
+ mov a,sp
+ add a,#-2 ; 2 bytes return address
+ mov r0,a ; r0 points to bh
+ mov ar1,@r0 ; load bh
+ dec r0
+ mov ar0,@r0 ; load bl
- #define bl r0
- #define bh r1
+ #define bl r0
+ #define bh r1
- __divint: ; entry point for __divsint
+ __divint: ; entry point for __divsint
#else // SDCC_STACK_AUTO
#if !defined(SDCC_PARMS_IN_BANK1)
#if defined(SDCC_NOOVERLAY)
- .area DSEG (DATA)
+ .area DSEG (DATA)
#else
- .area OSEG (OVR,DATA)
+ .area OSEG (OVR,DATA)
#endif
- .globl __divuint_PARM_2
- .globl __divsint_PARM_2
+ .globl __divuint_PARM_2
+ .globl __divsint_PARM_2
- __divuint_PARM_2:
- __divsint_PARM_2:
- .ds 2
+ __divuint_PARM_2:
+ __divsint_PARM_2:
+ .ds 2
- .area CSEG (CODE)
+ .area CSEG (CODE)
#endif // !SDCC_PARMS_IN_BANK1
#if defined(SDCC_PARMS_IN_BANK1)
- #define bl (b1_0)
- #define bh (b1_1)
+ #define bl (b1_0)
+ #define bh (b1_1)
#else
- #define bl (__divuint_PARM_2)
- #define bh (__divuint_PARM_2 + 1)
+ #define bl (__divuint_PARM_2)
+ #define bh (__divuint_PARM_2 + 1)
#endif // SDCC_PARMS_IN_BANK1
#endif // SDCC_STACK_AUTO
- mov count,#16
- clr a
- mov reste_l,a
- mov reste_h,a
-
- loop: mov a,al ; a <<= 1
- add a,acc
- mov al,a
- mov a,ah
- rlc a
- mov ah,a
-
- mov a,reste_l ; reste <<= 1
- rlc a ; feed in carry
- mov reste_l,a
- mov a,reste_h
- rlc a
- mov reste_h,a
-
- mov a,reste_l ; reste - b
- subb a,bl ; here carry is always clear, because
- ; reste <<= 1 never overflows
- mov b,a
- mov a,reste_h
- subb a,bh
-
- jc smaller ; reste >= b?
-
- mov reste_h,a ; -> yes; reste = reste - b;
- mov reste_l,b
- orl al,#1
- smaller: ; -> no
- djnz count,loop
- ret
-
- _endasm ;
+ mov count,#16
+ clr a
+ mov reste_l,a
+ mov reste_h,a
+
+ loop: mov a,al ; a <<= 1
+ add a,acc
+ mov al,a
+ mov a,ah
+ rlc a
+ mov ah,a
+
+ mov a,reste_l ; reste <<= 1
+ rlc a ; feed in carry
+ mov reste_l,a
+ mov a,reste_h
+ rlc a
+ mov reste_h,a
+
+ mov a,reste_l ; reste - b
+ subb a,bl ; here carry is always clear, because
+ ; reste <<= 1 never overflows
+ mov b,a
+ mov a,reste_h
+ subb a,bh
+
+ jc smaller ; reste >= b?
+
+ mov reste_h,a ; -> yes; reste = reste - b;
+ mov reste_l,b
+ orl al,#1
+ smaller: ; -> no
+ djnz count,loop
+ ret
+
+ __endasm ;
}
#else // defined _DIVUINT_ASM_SMALL || defined _DIVUINT_ASM_SMALL_AUTO