diff options
author | H. Peter Anvin <hpa@zytor.com> | 2012-07-20 17:51:57 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2012-07-20 17:51:57 -0700 |
commit | 96eace3841c14b1618f561e6766ea4cfb2534b9f (patch) | |
tree | ad1113e5daa4bded19cc912160a944259241c1f8 /doc | |
parent | 0498f87a64413dfeac644eeb16846239b9d1ed38 (diff) | |
download | nasm-96eace3841c14b1618f561e6766ea4cfb2534b9f.tar.gz nasm-96eace3841c14b1618f561e6766ea4cfb2534b9f.tar.bz2 nasm-96eace3841c14b1618f561e6766ea4cfb2534b9f.zip |
doc: document ifunc()
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'doc')
-rw-r--r-- | doc/nasmdoc.src | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index 5664b5b..0d21090 100644 --- a/doc/nasmdoc.src +++ b/doc/nasmdoc.src @@ -1787,16 +1787,24 @@ Since the \c{%} character is used extensively by the macro modulo operators are followed by white space wherever they appear. -\S{expmul} \i{Unary Operators}: \I{+ opunary}\c{+}, \I{- opunary}\c{-}, -\i\c{~}, \I{! opunary}\c{!} and \i\c{SEG} - -The highest-priority operators in NASM's expression grammar are -those which only apply to one argument. \c{-} negates its operand, -\c{+} does nothing (it's provided for symmetry with \c{-}), \c{~} -computes the \i{one's complement} of its operand, \c{!} is the -\i{logical negation} operator, and \c{SEG} provides the \i{segment address} +\S{expmul} \i{Unary Operators} + +The highest-priority operators in NASM's expression grammar are those +which only apply to one argument. These are \I{+ opunary}\c{+}, \I{- +opunary}\c{-}, \i\c{~}, \I{! opunary}\c{!}, \i\c{SEG}, and the +\i{integer functions} operators. + +\c{-} negates its operand, \c{+} does nothing (it's provided for +symmetry with \c{-}), \c{~} computes the \i{one's complement} of its +operand, \c{!} is the \i{logical negation} operator. + +\c{SEG} provides the \i{segment address} of its operand (explained in more detail in \k{segwrt}). +A set of additional operators with leading and trailing double +underscores are used to implement the integer functions of the +\c{ifunc} macro package, see \k{pkg_ifunc}. + \H{segwrt} \i\c{SEG} and \i\c{WRT} @@ -4276,6 +4284,34 @@ This packages contains the following floating-point convenience macros: \c %define float128h(x) __float128h__(x) +\H{pkg_ifunc} \i\c{ifunc}: \i{Integer functions} + +This package contains a set of macros which implement integer +functions. These are actually implemented as special operators, but +are most conveniently accessed via this macro package. + +The macros provided are: + +\S{ilog2} \i{Integer logarithms} + +These functions calculate the integer logarithm base 2 of their +argument, considered as an unsigned integer. The only differences +between the functions is their behavior if the argument provided is +not a power of two. + +The function \i\c{ilog2e()} (alias \i\c{ilog2()}) generate an error if +the argument is not a power of two. + +The function \i\c{ilog2w()} generate a warning if the argument is not +a power of two. + +The function \i\c{ilog2f()} rounds the argument down to the nearest +power of two; if the argument is zero it returns zero. + +The function \i\c{ilog2c()} rounds the argument up to the nearest +power of two. + + \C{directive} \i{Assembler Directives} NASM, though it attempts to avoid the bureaucracy of assemblers like |