| FAST_DIVIDE32(3) | Library Functions Manual | FAST_DIVIDE32(3) | 
fast_divide32,
  fast_divide32_prepare,
  fast_remainder32 —
#include <sys/bitops.h>
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);
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.
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);
Torbjörn Granlund and Peter L. Montgomery, Division by Invariant Integers Using Multiplication, ACM SIGPLAN Notices, Issue 6, Volume 29, http://gmplib.org/~tege/divcnst-pldi94.pdf, 61-72, June 1994.
fast_divide32 function appeared in
  NetBSD 6.0.
| May 10, 2011 | NetBSD 9.3 |