unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (NetBSD-6.1.5)
Page:
Section:
Apropos / Subsearch:
optional field

FAST_DIVIDE32(3)           Library Functions Manual           FAST_DIVIDE32(3)

NAME
     fast_divide32, fast_divide32_prepare, fast_remainder32 -- fast 32bit
     division and remainder

SYNOPSIS
     #include <&lt;sys/bitops.h>&gt;

     uint32_t
     fast_divide32(uint32_t v, uint32_t div, uint32_t m, uint8_t s1, uint8_t
     s2);

     uint32_t
     fast_remainder32(uint32_t v, uint32_t div, uint32_t m, uint8_t
     s1, uint8_t s2);

     void
     fast_divide32_prepare(uint32_t div, uint32_t *m, uint8_t *s1, uint8_t
     *s2);

DESCRIPTION
     The fast_divide32 and fast_remainder32 functions compute the equivalent
     of v / div and v % div using optimised CPU instructions.  The constants
     m, s1, and s2 must first be preset for a given value of div with the
     fast_divide32_prepare function.

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 div arguments should be equivalent to the
     assembly created by GCC.

EXAMPLES
     The following example computes q = a / b and r = a % b:

           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);

SEE ALSO
     bitops(3), div(3), remainder(3)

     Torbjorn Granlund and Peter L. Montgomery, "Division by Invariant
     Integers Using Multiplication", ACM SIGPLAN Notices, Issue 6, Volume 29,
     61-72, June 1994, http://gmplib.org/~tege/divcnst-pldi94.pdf.

HISTORY
     The fast_divide32 function appeared in NetBSD 6.0.

NetBSD 6.1.5                     May 10, 2011                     NetBSD 6.1.5