Module Name: src Committed By: joerg Date: Fri Mar 19 20:11:22 UTC 2010
Modified Files: src/distrib/sets/lists/comp: mi src/share/man/man3: Makefile Added Files: src/share/man/man3: fast_divide32.3 Log Message: Add man page for fast_divide32. To generate a diff of this commit: cvs rdiff -u -r1.1406 -r1.1407 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.39 -r1.40 src/share/man/man3/Makefile cvs rdiff -u -r0 -r1.1 src/share/man/man3/fast_divide32.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.1406 src/distrib/sets/lists/comp/mi:1.1407 --- src/distrib/sets/lists/comp/mi:1.1406 Mon Mar 8 12:32:17 2010 +++ src/distrib/sets/lists/comp/mi Fri Mar 19 20:11:21 2010 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1406 2010/03/08 12:32:17 pooka Exp $ +# $NetBSD: mi,v 1.1407 2010/03/19 20:11:21 joerg Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -5682,6 +5682,9 @@ ./usr/share/man/cat3/extattr_string_to_namespace.0 comp-c-catman .cat ./usr/share/man/cat3/fabs.0 comp-c-catman .cat ./usr/share/man/cat3/fabsf.0 comp-c-catman .cat +./usr/share/man/cat3/fast_divide32.0 comp-c-catman .cat +./usr/share/man/cat3/fast_divide32_prepare.0 comp-c-catman .cat +./usr/share/man/cat3/fast_remainder32.0 comp-c-catman .cat ./usr/share/man/cat3/fclose.0 comp-c-catman .cat ./usr/share/man/cat3/fdim.0 comp-c-catman .cat ./usr/share/man/cat3/fdimf.0 comp-c-catman .cat @@ -11453,6 +11456,9 @@ ./usr/share/man/html3/extattr_string_to_namespace.html comp-c-htmlman html ./usr/share/man/html3/fabs.html comp-c-htmlman html ./usr/share/man/html3/fabsf.html comp-c-htmlman html +./usr/share/man/html3/fast_divide32.html comp-c-htmlman html +./usr/share/man/html3/fast_divide32_prepare.html comp-c-htmlman html +./usr/share/man/html3/fast_remainder32.html comp-c-htmlman html ./usr/share/man/html3/fclose.html comp-c-htmlman html ./usr/share/man/html3/fdim.html comp-c-htmlman html ./usr/share/man/html3/fdimf.html comp-c-htmlman html @@ -17134,6 +17140,9 @@ ./usr/share/man/man3/extattr_string_to_namespace.3 comp-c-man .man ./usr/share/man/man3/fabs.3 comp-c-man .man ./usr/share/man/man3/fabsf.3 comp-c-man .man +./usr/share/man/man3/fast_divide32.3 comp-c-man .man +./usr/share/man/man3/fast_divide32_prepare.3 comp-c-man .man +./usr/share/man/man3/fast_remainder32.3 comp-c-man .man ./usr/share/man/man3/fclose.3 comp-c-man .man ./usr/share/man/man3/fdim.3 comp-c-man .man ./usr/share/man/man3/fdimf.3 comp-c-man .man Index: src/share/man/man3/Makefile diff -u src/share/man/man3/Makefile:1.39 src/share/man/man3/Makefile:1.40 --- src/share/man/man3/Makefile:1.39 Mon Mar 1 16:36:15 2010 +++ src/share/man/man3/Makefile Fri Mar 19 20:11:22 2010 @@ -1,9 +1,9 @@ -# $NetBSD: Makefile,v 1.39 2010/03/01 16:36:15 jruoho Exp $ +# $NetBSD: Makefile,v 1.40 2010/03/19 20:11:22 joerg Exp $ # @(#)Makefile 8.2 (Berkeley) 12/13/93 MAN= _DIAGASSERT.3 __UNCONST.3 CMSG_DATA.3 \ __arraycount.3 assert.3 bits.3 bitstring.3 dlfcn.3 end.3 \ - gcq.3 intro.3 offsetof.3 queue.3 stdarg.3 sysexits.3 \ + fast_divide32.3 gcq.3 intro.3 offsetof.3 queue.3 stdarg.3 sysexits.3 \ tgmath.3 timeradd.3 tree.3 varargs.3 USETBL= # used by queue.3 @@ -25,6 +25,8 @@ bits.3 __SHIFTOUT.3 \ bits.3 __SHIFTOUT_MASK.3 MLINKS+=end.3 edata.3 end.3 etext.3 +MLINKS+=fast_divide32.3 fast_divide32_prepare.3 \ + fast_divide32.3 fast_remainder32.3 MLINKS+=gcq.3 GCQ_INIT.3 \ gcq.3 GCQ_INIT_HEAD.3 \ gcq.3 gcq_init.3 \ Added files: Index: src/share/man/man3/fast_divide32.3 diff -u /dev/null src/share/man/man3/fast_divide32.3:1.1 --- /dev/null Fri Mar 19 20:11:22 2010 +++ src/share/man/man3/fast_divide32.3 Fri Mar 19 20:11:22 2010 @@ -0,0 +1,100 @@ +.\" $NetBSD: fast_divide32.3,v 1.1 2010/03/19 20:11:22 joerg Exp $ +.\" +.\" Copyright (c) 2010 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Joerg Sonnenberger. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. +.\" +.Dd March 19, 2010 +.Dt FAST_DIVIDE32 3 +.Os +.Sh NAME +.Nm fast_divide32 , +.Nm fast_divide32_prepare , +.Nm fast_remainder32 +.Nd fast 32bit division and remainder +.Sh SYNOPSIS +.In sys/bitops.h +.Ft uint32_t +.Fn fast_divide32 "uint32_t v" "uint32_t div" "uint32_t m" "uint8_t s1" \ +"uint8_t s2" +.Ft uint32_t +.Fn fast_remainder32 "uint32_t v" "uint32_t div" "uint32_t m" "uint8_t s1" \ +"uint8_t s2" +.Ft void +.Fn fast_divide32_prepare "uint32_t div" "uint32_t *m" "uint8_t *s1" \ +"uint8_t *s2" +.Sh DESCRIPTION +The +.Nm fast_divide32 +and +.Nm fast_remainder32 +functions compute the equivalent of +.Fa v / Fa div +and +.Fa v % Fa div +using optimised CPU instructions. +The constants +.Fa m , +.Fa s1 +and +.Fa s2 +must first be preset for a given value of +.Fa div +with the +.Nm fast_divide32_prepare +function. +.Sh RATIONALE +These functions are useful for inner loops and other performance-sensitive +tasks. +The functions expand to code that is typically slightly larger than +a plain division instruction, but requires less time to execute. +The code for constant +.Fa div +arguments should be equivalent to the assembly created by GCC. +.Sh EXAMPLE +The following example computes q=a/b and r=a%b: +.Bd -literal +uint32_t a, b, q, r, m; +uint8_t s1, s2; + +fast_divide32_prepare(b, &m, &s1, &s2); + +q = fast_divide32(a, b, m, s1, s2); +r = fast_remainder32(a, b, m, s1, s2); +.Ed +.Sh SEE ALSO +.Rs +.%A Torbj\(:orn Granlund +.%A Peter L. Montgomery +.%T Division by Invariant Integers Using Multiplication +.%D 1994 +.%U http://swox.se/~tg/divcnst-pldi94.pdf +.Re +.Sh HISTORY +The +.Nm +function appeared in +.Nx 6.0 .