OSDN Git Service

* dwarf2out.c, fold-const.c, ipa-type-escape.c,
[pf3gnuchains/gcc-fork.git] / gcc / config / stormy16 / stormy16-lib2.c
1 typedef          int HItype             __attribute__ ((mode (HI)));
2 typedef          int SItype             __attribute__ ((mode (SI)));
3 typedef unsigned int USItype            __attribute__ ((mode (SI)));
4
5 typedef int word_type                   __attribute__ ((mode (__word__)));
6
7 USItype
8 udivmodsi4(USItype num, USItype den, word_type modwanted)
9 {
10   USItype bit = 1;
11   USItype res = 0;
12
13   while (den < num && bit && !(den & (1L<<31)))
14     {
15       den <<=1;
16       bit <<=1;
17     }
18   while (bit)
19     {
20       if (num >= den)
21         {
22           num -= den;
23           res |= bit;
24         }
25       bit >>=1;
26       den >>=1;
27     }
28   if (modwanted) return num;
29   return res;
30 }
31
32
33
34 SItype
35 __divsi3 (SItype a, SItype b)
36 {
37   word_type neg = 0;
38   SItype res;
39
40   if (a < 0)
41     {
42       a = -a;
43       neg = !neg;
44     }
45
46   if (b < 0)
47     {
48       b = -b;
49       neg = !neg;
50     }
51
52   res = udivmodsi4 (a, b, 0);
53
54   if (neg)
55     res = -res;
56
57   return res;
58 }
59
60
61
62 SItype
63 __modsi3 (SItype a, SItype b)
64 {
65   word_type neg = 0;
66   SItype res;
67
68   if (a < 0)
69     {
70       a = -a;
71       neg = 1;
72     }
73
74   if (b < 0)
75     b = -b;
76
77   res = udivmodsi4 (a, b, 1);
78
79   if (neg)
80     res = -res;
81
82   return res;
83 }
84
85
86
87
88 SItype
89 __udivsi3 (SItype a, SItype b)
90 {
91   return udivmodsi4 (a, b, 0);
92 }
93
94
95
96 SItype
97 __umodsi3 (SItype a, SItype b)
98 {
99   return udivmodsi4 (a, b, 1);
100 }
101
102 SItype
103 __ashlsi3 (SItype a, SItype b)
104 {
105   word_type i;
106   
107   if (b & 16)
108     a <<= 16;
109   if (b & 8)
110     a <<= 8;
111   for (i = (b & 0x7); i > 0; --i)
112     a <<= 1;
113   return a;
114 }
115
116 SItype
117 __ashrsi3 (SItype a, SItype b)
118 {
119   word_type i;
120   
121   if (b & 16)
122     a >>= 16;
123   if (b & 8)
124     a >>= 8;
125   for (i = (b & 0x7); i > 0; --i)
126     a >>= 1;
127   return a;
128 }
129
130 USItype
131 __lshrsi3 (USItype a, USItype b)
132 {
133   word_type i;
134   
135   if (b & 16)
136     a >>= 16;
137   if (b & 8)
138     a >>= 8;
139   for (i = (b & 0x7); i > 0; --i)
140     a >>= 1;
141   return a;
142 }