mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	Add general support in the function parser for "integer functions" (actually implemented as special unary operators, then wrapped in macros) and implement a family of integer logarithms. The only difference is the behavior on a non-power-of-two argument: ilog2[e] -- throw an error ilog2w -- throw a warning ilog2f -- round down to power of 2 ilog2c -- round up to power of 2 This is useful for back-converting from masks to bit values. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ;; --------------------------------------------------------------------------
 | |
| ;;   
 | |
| ;;   Copyright 2012 The NASM Authors - All Rights Reserved
 | |
| ;;   See the file AUTHORS included with the NASM distribution for
 | |
| ;;   the specific copyright holders.
 | |
| ;;
 | |
| ;;   Redistribution and use in source and binary forms, with or without
 | |
| ;;   modification, are permitted provided that the following
 | |
| ;;   conditions are met:
 | |
| ;;
 | |
| ;;   * Redistributions of source code must retain the above copyright
 | |
| ;;     notice, this list of conditions and the following disclaimer.
 | |
| ;;   * Redistributions in binary form must reproduce the above
 | |
| ;;     copyright notice, this list of conditions and the following
 | |
| ;;     disclaimer in the documentation and/or other materials provided
 | |
| ;;     with the distribution.
 | |
| ;;     
 | |
| ;;     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 | |
| ;;     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 | |
| ;;     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | |
| ;;     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | |
| ;;     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | |
| ;;     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | |
| ;;     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
| ;;     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | |
| ;;     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| ;;     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
| ;;     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | |
| ;;     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 | |
| ;;     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| ;;
 | |
| ;; --------------------------------------------------------------------------
 | |
| 
 | |
| ;;
 | |
| ;; ifunc.mac
 | |
| ;;
 | |
| ;; Integer function utility macros
 | |
| ;;
 | |
| 
 | |
| USE: ifunc
 | |
| 
 | |
| %idefine ilog2(x)	(__ilog2e__(x))
 | |
| %idefine ilog2e(x)	(__ilog2e__(x))
 | |
| %idefine ilog2w(x)	(__ilog2w__(x))
 | |
| %idefine ilog2f(x)	(__ilog2f__(x))
 | |
| %idefine ilog2c(x)	(__ilog2c__(x))
 |