diff options
author | H. Peter Anvin <hpa@zytor.com> | 2012-05-31 10:25:37 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2012-05-31 10:25:37 -0700 |
commit | 290b4cb3a4d32ec8260e88b4e67fc968cf9adb5e (patch) | |
tree | de83fd4983a16831905213858b417239aa58cb75 /macros | |
parent | 3d1d159e1c876308712fd5e21089dfddfbad1e69 (diff) | |
download | nasm-290b4cb3a4d32ec8260e88b4e67fc968cf9adb5e.tar.gz nasm-290b4cb3a4d32ec8260e88b4e67fc968cf9adb5e.tar.bz2 nasm-290b4cb3a4d32ec8260e88b4e67fc968cf9adb5e.zip |
eval: add general support for "integer functions" and add ilog2*()
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>
Diffstat (limited to 'macros')
-rw-r--r-- | macros/ifunc.mac | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/macros/ifunc.mac b/macros/ifunc.mac new file mode 100644 index 0000000..fc0d313 --- /dev/null +++ b/macros/ifunc.mac @@ -0,0 +1,46 @@ +;; -------------------------------------------------------------------------- +;; +;; 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)) |