sparc_v8.S revision 1.3 1 1.1 pk /*
2 1.1 pk * GCC generated output for sparc v8 mul/div/rem operations.
3 1.1 pk * Included in the sparc_v8.so shared library for use on sparc v8
4 1.1 pk * machines instead of the libc.so versions.
5 1.1 pk */
6 1.1 pk .file "sparc_v8.S"
7 1.1 pk .section ".text"
8 1.1 pk
9 1.3 uwe
10 1.3 uwe /*
11 1.3 uwe * unsigned .umul(unsigned a, unsigned b)
12 1.3 uwe *
13 1.3 uwe * This function computes a * b with unsigned integer
14 1.3 uwe * multiplication. When .umul returns, the caller's register %o0
15 1.3 uwe * contains the least significant 32 bits of the 64-bit result;
16 1.3 uwe * register %o1 holds the most significant 32 bits of the result.
17 1.3 uwe * Upon return, the integer condition codes and registers %o2
18 1.3 uwe * through %o5 have unspecified values.
19 1.3 uwe */
20 1.1 pk .align 4
21 1.1 pk .global .umul
22 1.1 pk .type .umul,@function
23 1.1 pk .umul:
24 1.3 uwe umul %o0, %o1, %o0
25 1.1 pk retl
26 1.3 uwe rd %y, %o1
27 1.1 pk .LLfe1:
28 1.1 pk .size .umul,.LLfe1-.umul
29 1.1 pk
30 1.3 uwe
31 1.3 uwe /*
32 1.3 uwe * int .mul(int a, int b)
33 1.3 uwe *
34 1.3 uwe * This function computes a * b with signed integer
35 1.3 uwe * multiplication. When .mul returns, the caller's register %o0
36 1.3 uwe * contains the least significant 32 bits of the 64-bit result;
37 1.3 uwe * register %o1 holds the most significant 32 bits of the result.
38 1.3 uwe * Upon return, the integer condition codes and registers %o2
39 1.3 uwe * through %o5 have unspecified values.
40 1.3 uwe */
41 1.1 pk .align 4
42 1.1 pk .global .mul
43 1.1 pk .type .mul,@function
44 1.1 pk .mul:
45 1.3 uwe smul %o0, %o1, %o0
46 1.1 pk retl
47 1.3 uwe rd %y, %o1
48 1.1 pk .LLfe2:
49 1.1 pk .size .mul,.LLfe2-.mul
50 1.1 pk
51 1.1 pk /*--- .udiv ---*/
52 1.1 pk .align 4
53 1.1 pk .global .udiv
54 1.1 pk .type .udiv,@function
55 1.1 pk .udiv:
56 1.1 pk wr %g0, 0, %y
57 1.1 pk nop; nop; nop
58 1.1 pk retl
59 1.1 pk udiv %o0, %o1, %o0
60 1.1 pk .LLfe3:
61 1.1 pk .size .udiv,.LLfe3-.udiv
62 1.1 pk
63 1.1 pk /*--- .div ---*/
64 1.1 pk .align 4
65 1.1 pk .global .div
66 1.1 pk .type .div,@function
67 1.1 pk .div:
68 1.1 pk sra %o0, 31, %g2
69 1.1 pk wr %g2, 0, %y
70 1.1 pk nop; nop; nop
71 1.1 pk retl
72 1.1 pk sdiv %o0, %o1, %o0
73 1.1 pk .LLfe4:
74 1.1 pk .size .div,.LLfe4-.div
75 1.1 pk
76 1.1 pk /*--- .urem ---*/
77 1.1 pk .align 4
78 1.1 pk .global .urem
79 1.1 pk .type .urem,@function
80 1.1 pk .urem:
81 1.1 pk wr %g0, %g0, %y
82 1.1 pk nop; nop; nop
83 1.1 pk udiv %o0, %o1, %g2
84 1.1 pk smul %g2, %o1, %g2
85 1.1 pk retl
86 1.1 pk sub %o0, %g2, %o0
87 1.1 pk .LLfe5:
88 1.1 pk .size .urem,.LLfe5-.urem
89 1.1 pk
90 1.1 pk /*--- .rem ---*/
91 1.1 pk .align 4
92 1.1 pk .global .rem
93 1.1 pk .type .rem,@function
94 1.1 pk .rem:
95 1.1 pk sra %o0, 31, %g3
96 1.1 pk wr %g3, 0, %y
97 1.1 pk nop; nop; nop
98 1.1 pk sdiv %o0, %o1, %g2
99 1.1 pk smul %g2, %o1, %g2
100 1.1 pk retl
101 1.1 pk sub %o0, %g2, %o0
102 1.1 pk .LLfe6:
103 1.1 pk .size .rem,.LLfe6-.rem
104 1.1 pk !.ident "GCC: (GNU) 2.95.3 20010315 (release) (NetBSD nb3)"
105