From 96eace3841c14b1618f561e6766ea4cfb2534b9f Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 20 Jul 2012 17:51:57 -0700 Subject: [PATCH] doc: document ifunc() Signed-off-by: H. Peter Anvin --- doc/nasmdoc.src | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/doc/nasmdoc.src b/doc/nasmdoc.src index 5664b5b6..0d210907 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 -- 2.11.4.GIT