mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			723 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			723 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from z3 import *
 | |
| 
 | |
| def BVUnsignedUpCast(x, n_bits):
 | |
| 	assert(x.size() <= n_bits)
 | |
| 	if x.size() < n_bits:
 | |
| 		return Concat(BitVecVal(0, n_bits - x.size()), x)
 | |
| 	else:
 | |
| 		return x
 | |
| 
 | |
| def BVUnsignedMax(type_bits, n_bits):
 | |
| 	assert(type_bits <= n_bits)
 | |
| 	return BitVecVal((1 << type_bits) - 1, n_bits)
 | |
| 
 | |
| def BVSignedUpCast(x, n_bits):
 | |
| 	assert(x.size() <= n_bits)
 | |
| 	if x.size() < n_bits:
 | |
| 		return Concat(If(x < 0, BitVecVal(-1, n_bits - x.size()), BitVecVal(0, n_bits - x.size())), x)
 | |
| 	else:
 | |
| 		return x
 | |
| 
 | |
| def BVSignedMax(type_bits, n_bits):
 | |
| 	assert(type_bits <= n_bits)
 | |
| 	return BitVecVal((1 << (type_bits - 1)) - 1, n_bits)
 | |
| 
 | |
| def BVSignedMin(type_bits, n_bits):
 | |
| 	assert(type_bits <= n_bits)
 | |
| 	return BitVecVal(-(1 << (type_bits - 1)), n_bits)
 |