X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2F_modsint.c;h=6ca1f5201c095be8ba00c322f429f15e1a783a58;hb=3bd25d75bcad68055bb616dcc29dde8a2965965e;hp=a46268a36b097176fa89f273dcf373ea685429f8;hpb=2b768f4d1d91642a8e7ffdddafd545d286ae1fbc;p=fw%2Fsdcc diff --git a/device/lib/_modsint.c b/device/lib/_modsint.c index a46268a3..6ca1f520 100644 --- a/device/lib/_modsint.c +++ b/device/lib/_modsint.c @@ -49,151 +49,149 @@ unsigned unsigned _moduint (unsigned a, unsigned b); #if defined _MODSINT_ASM_SMALL static void -_modsint_dummy (void) _naked +_modsint_dummy (void) __naked { - _asm + __asm - #define a0 dpl - #define a1 dph + #define a0 dpl + #define a1 dph - .globl __modsint + .globl __modsint #if defined(SDCC_PARMS_IN_BANK1) - #define b0 (b1_0) - #define b1 (b1_1) + #define b0 (b1_0) + #define b1 (b1_1) #else - // _modsint_PARM_2 shares the same memory with _moduint_PARM_2 - // and is defined in _moduint.c - #define b0 (__modsint_PARM_2) - #define b1 (__modsint_PARM_2 + 1) + // _modsint_PARM_2 shares the same memory with _moduint_PARM_2 + // and is defined in _moduint.c + #define b0 (__modsint_PARM_2) + #define b1 (__modsint_PARM_2 + 1) #endif - __modsint: - ; a1 in dph - ; b1 in (__modsint_PARM_2 + 1) +__modsint: + ; a1 in dph + ; b1 in (__modsint_PARM_2 + 1) - clr F0 ; Flag 0 in PSW - ; available to user for general purpose - mov a,a1 - jnb acc.7,a_not_negative + clr F0 ; Flag 0 in PSW + ; available to user for general purpose + mov a,a1 + jnb acc.7,a_not_negative - setb F0 + setb F0 - clr a - clr c - subb a,a0 - mov a0,a - clr a - subb a,a1 - mov a1,a + clr a + clr c + subb a,a0 + mov a0,a + clr a + subb a,a1 + mov a1,a - a_not_negative: +a_not_negative: - mov a,b1 - jnb acc.7,b_not_negative + mov a,b1 + jnb acc.7,b_not_negative - clr a - clr c - subb a,b0 - mov b0,a - clr a - subb a,b1 - mov b1,a + clr a + clr c + subb a,b0 + mov b0,a + clr a + subb a,b1 + mov b1,a - b_not_negative: +b_not_negative: - lcall __moduint + lcall __moduint - jnb F0,not_negative + jnb F0,not_negative - clr a - clr c - subb a,a0 - mov a0,a - clr a - subb a,a1 - mov a1,a + clr a + clr c + subb a,a0 + mov a0,a + clr a + subb a,a1 + mov a1,a - not_negative: - ret +not_negative: + ret - _endasm ; + __endasm; } #elif defined _MODSINT_ASM_SMALL_AUTO static void -_modsint_dummy (void) _naked +_modsint_dummy (void) __naked { - _asm + __asm - #define a0 dpl - #define a1 dph + #define a0 dpl + #define a1 dph - ar0 = 0 ; BUG register set is not considered - ar1 = 1 + ar0 = 0 ; BUG register set is not considered + ar1 = 1 - .globl __modsint + .globl __modsint - __modsint: +__modsint: - clr F0 ; Flag 0 in PSW - ; available to user for general purpose - mov a,a1 - jnb acc.7,a_not_negative + clr F0 ; Flag 0 in PSW + ; available to user for general purpose + mov a,a1 + jnb acc.7,a_not_negative - setb F0 + setb F0 - clr a - clr c - subb a,a0 - mov a0,a - clr a - subb a,a1 - mov a1,a + clr a + clr c + subb a,a0 + mov a0,a + clr a + subb a,a1 + mov a1,a - a_not_negative: +a_not_negative: - mov a,sp - add a,#-2 ; 2 bytes return address - mov r0,a ; r0 points to b1 - mov a,@r0 ; b1 + mov a,sp + add a,#-2 ; 2 bytes return address + mov r0,a ; r0 points to b1 + mov a,@r0 ; b1 - jnb acc.7,b_not_negative + jnb acc.7,b_not_negative - cpl F0 + dec r0 - dec r0 + clr a + clr c + subb a,@r0 ; b0 + mov @r0,a + clr a + inc r0 + subb a,@r0 ; b1 + mov @r0,a - clr a - clr c - subb a,@r0 ; b0 - mov @r0,a - clr a - inc r0 - subb a,@r0 ; b1 - mov @r0,a +b_not_negative: - b_not_negative: + mov ar1,@r0 ; b1 + dec r0 + mov ar0,@r0 ; b0 - mov ar1,@r0 ; b1 - dec r0 - mov ar0,@r0 ; b0 + lcall __modint - lcall __modint + jnb F0,not_negative - jnb F0,not_negative + clr a + clr c + subb a,a0 + mov a0,a + clr a + subb a,a1 + mov a1,a - clr a - clr c - subb a,a0 - mov a0,a - clr a - subb a,a1 - mov a1,a +not_negative: + ret - not_negative: - ret - - _endasm ; + __endasm; } #else // _MODSINT_ASM_ @@ -205,7 +203,7 @@ int _modsint (int a, int b) r = _moduint((a < 0 ? -a : a), (b < 0 ? -b : b)); - if ( (a < 0) ^ (b < 0)) + if (a < 0) return -r; else return r;