* config/alpha/alpha.c (override_options): Set align_loops,
[official-gcc.git] / libf2c / libF77 / qbitbits.c
blobad4ac963ce20e1c487317094bf378d5e2b220a55
1 #include "f2c.h"
3 #ifndef LONGBITS
4 #define LONGBITS 32
5 #endif
7 #ifndef LONG8BITS
8 #define LONG8BITS (2*LONGBITS)
9 #endif
11 integer
12 #ifdef KR_headers
13 qbit_bits(a, b, len) longint a; integer b, len;
14 #else
15 qbit_bits(longint a, integer b, integer len)
16 #endif
18 /* Assume 2's complement arithmetic */
20 ulongint x, y;
22 x = (ulongint) a;
23 y = (ulongint)-1L;
24 x >>= b;
25 y <<= len;
26 return (longint)(x & y);
29 longint
30 #ifdef KR_headers
31 qbit_cshift(a, b, len) longint a; integer b, len;
32 #else
33 qbit_cshift(longint a, integer b, integer len)
34 #endif
36 ulongint x, y, z;
38 x = (ulongint)a;
39 if (len <= 0) {
40 if (len == 0)
41 return 0;
42 goto full_len;
44 if (len >= LONG8BITS) {
45 full_len:
46 if (b >= 0) {
47 b %= LONG8BITS;
48 return (longint)(x << b | x >> LONG8BITS - b );
50 b = -b;
51 b %= LONG8BITS;
52 return (longint)(x << LONG8BITS - b | x >> b);
54 y = z = (unsigned long)-1;
55 y <<= len;
56 z &= ~y;
57 y &= x;
58 x &= z;
59 if (b >= 0) {
60 b %= len;
61 return (longint)(y | z & (x << b | x >> len - b));
63 b = -b;
64 b %= len;
65 return (longint)(y | z & (x >> b | x << len - b));