mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
#include "f2c.h"
 | 
						|
 | 
						|
#ifndef LONGBITS
 | 
						|
#define LONGBITS 32
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef LONG8BITS
 | 
						|
#define LONG8BITS (2*LONGBITS)
 | 
						|
#endif
 | 
						|
 | 
						|
 integer
 | 
						|
#ifdef KR_headers
 | 
						|
qbit_bits(a, b, len) longint a; integer b, len;
 | 
						|
#else
 | 
						|
qbit_bits(longint a, integer b, integer len)
 | 
						|
#endif
 | 
						|
{
 | 
						|
	/* Assume 2's complement arithmetic */
 | 
						|
 | 
						|
	ulongint x, y;
 | 
						|
 | 
						|
	x = (ulongint) a;
 | 
						|
	y = (ulongint)-1L;
 | 
						|
	x >>= b;
 | 
						|
	y <<= len;
 | 
						|
	return (longint)(x & y);
 | 
						|
	}
 | 
						|
 | 
						|
 longint
 | 
						|
#ifdef KR_headers
 | 
						|
qbit_cshift(a, b, len) longint a; integer b, len;
 | 
						|
#else
 | 
						|
qbit_cshift(longint a, integer b, integer len)
 | 
						|
#endif
 | 
						|
{
 | 
						|
	ulongint x, y, z;
 | 
						|
 | 
						|
	x = (ulongint)a;
 | 
						|
	if (len <= 0) {
 | 
						|
		if (len == 0)
 | 
						|
			return 0;
 | 
						|
		goto full_len;
 | 
						|
		}
 | 
						|
	if (len >= LONG8BITS) {
 | 
						|
 full_len:
 | 
						|
		if (b >= 0) {
 | 
						|
			b %= LONG8BITS;
 | 
						|
			return (longint)(x << b | x >> LONG8BITS - b );
 | 
						|
			}
 | 
						|
		b = -b;
 | 
						|
		b %= LONG8BITS;
 | 
						|
		return (longint)(x << LONG8BITS - b | x >> b);
 | 
						|
		}
 | 
						|
	y = z = (unsigned long)-1;
 | 
						|
	y <<= len;
 | 
						|
	z &= ~y;
 | 
						|
	y &= x;
 | 
						|
	x &= z;
 | 
						|
	if (b >= 0) {
 | 
						|
		b %= len;
 | 
						|
		return (longint)(y | z & (x << b | x >> len - b));
 | 
						|
		}
 | 
						|
	b = -b;
 | 
						|
	b %= len;
 | 
						|
	return (longint)(y | z & (x >> b | x << len - b));
 | 
						|
	}
 |