root/lib/libarch/sparc/v8/sparc_v8.S
/*
 * GCC generated output for sparc v8 mul/div/rem operations.
 * Included in the sparc_v8.so shared library for use on sparc v8
 * machines instead of the libc.so versions.
 */
        .file   "sparc_v8.S"
.section        ".text"


/*
 * unsigned .umul(unsigned a, unsigned b)
 *
 *     This function computes a * b with unsigned integer
 *     multiplication.  When .umul returns, the caller's register %o0
 *     contains the least significant 32 bits of the 64-bit result;
 *     register %o1 holds the most significant 32 bits of the result.
 *     Upon return, the integer condition codes and registers %o2
 *     through %o5 have unspecified values.
 */
        .align 4
        .global .umul
        .type    .umul,@function
.umul:
        umul    %o0, %o1, %o0
        retl
         rd     %y, %o1
.LLfe1:
        .size    .umul,.LLfe1-.umul


/*
 * int .mul(int a, int b)
 *
 *     This function computes a * b with signed integer
 *     multiplication.  When .mul returns, the caller's register %o0
 *     contains the least significant 32 bits of the 64-bit result;
 *     register %o1 holds the most significant 32 bits of the result.
 *     Upon return, the integer condition codes and registers %o2
 *     through %o5 have unspecified values.
 */
        .align 4
        .global .mul
        .type    .mul,@function
.mul:
        smul    %o0, %o1, %o0
        retl
         rd     %y, %o1
.LLfe2:
        .size    .mul,.LLfe2-.mul

/*--- .udiv ---*/
        .align 4
        .global .udiv
        .type    .udiv,@function
.udiv:
        wr      %g0, 0, %y
        nop; nop; nop
        retl
         udiv   %o0, %o1, %o0
.LLfe3:
        .size    .udiv,.LLfe3-.udiv

/*--- .div ---*/
        .align 4
        .global .div
        .type    .div,@function
.div:
        sra     %o0, 31, %g2
        wr      %g2, 0, %y
        nop; nop; nop
        retl
         sdiv   %o0, %o1, %o0
.LLfe4:
        .size    .div,.LLfe4-.div

/*--- .urem ---*/
        .align 4
        .global .urem
        .type    .urem,@function
.urem:
        wr      %g0, %g0, %y
        nop; nop; nop
        udiv    %o0, %o1, %g2
        smul    %g2, %o1, %g2
        retl
         sub    %o0, %g2, %o0
.LLfe5:
        .size    .urem,.LLfe5-.urem

/*--- .rem ---*/
        .align 4
        .global .rem
        .type    .rem,@function
.rem:
        sra     %o0, 31, %g3
        wr      %g3, 0, %y
        nop; nop; nop
        sdiv    %o0, %o1, %g2
        smul    %g2, %o1, %g2
        retl
         sub    %o0, %g2, %o0
.LLfe6:
        .size    .rem,.LLfe6-.rem
        !.ident "GCC: (GNU) 2.95.3 20010315 (release) (NetBSD nb3)"