URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [sparc/] [lb1spl.asm] - Rev 282
Compare with Previous | Blame | View Log
/* This is an assembly language implementation of mulsi3, divsi3, and modsi3for the sparclite processor.These routines are all from the SPARClite User's Guide, slightly editedto match the desired calling convention, and also to optimize them. */#ifdef L_udivsi3.text.align 4.global .udiv.proc 04.udiv:wr %g0,%g0,%y ! Not a delayed write for sparclitetst %g0divscc %o0,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1retldivscc %g1,%o1,%o0#endif#ifdef L_umodsi3.text.align 4.global .urem.proc 04.urem:wr %g0,%g0,%y ! Not a delayed write for sparclitetst %g0divscc %o0,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1divscc %g1,%o1,%g1bl 1frd %y,%o0retlnop1: retladd %o0,%o1,%o0#endif#ifdef L_divsi3.text.align 4.global .div.proc 04! ??? This routine could be made faster if was optimized, and if it was! rewritten to only calculate the quotient..div:wr %g0,%g0,%y ! Not a delayed write for sparclitemov %o1,%o4tst %o1bl,a 1fsub %g0,%o4,%o41: tst %o0bl,a 2fmov -1,%y2: divscc %o0,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1be 6fmov %y,%o3bg 4faddcc %o3,%o4,%g0be,a 6fmov %g0,%o3tst %o0bl 5ftst %g1ba 5fadd %o3,%o4,%o34: subcc %o3,%o4,%g0be,a 6fmov %g0,%o3tst %o0bge 5ftst %g1sub %o3,%o4,%o35: bl,a 6fadd %g1,1,%g16: tst %o1bl,a 7fsub %g0,%g1,%g17: retlmov %g1,%o0 ! Quotient is in %g1.#endif#ifdef L_modsi3.text.align 4.global .rem.proc 04! ??? This routine could be made faster if was optimized, and if it was! rewritten to only calculate the remainder..rem:wr %g0,%g0,%y ! Not a delayed write for sparclitemov %o1,%o4tst %o1bl,a 1fsub %g0,%o4,%o41: tst %o0bl,a 2fmov -1,%y2: divscc %o0,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1divscc %g1,%o4,%g1be 6fmov %y,%o3bg 4faddcc %o3,%o4,%g0be,a 6fmov %g0,%o3tst %o0bl 5ftst %g1ba 5fadd %o3,%o4,%o34: subcc %o3,%o4,%g0be,a 6fmov %g0,%o3tst %o0bge 5ftst %g1sub %o3,%o4,%o35: bl,a 6fadd %g1,1,%g16: tst %o1bl,a 7fsub %g0,%g1,%g17: retlmov %o3,%o0 ! Remainder is in %o3.#endif
