1/* 2 * Fast, simple, yet decent quality random number generator based on 3 * a paper by David G. Carta ("Two Fast Implementations of the 4 * `Minimal Standard' Random Number Generator," Communications of the 5 * ACM, January, 1990). 6 * 7 * Copyright (C) 2002 Hewlett-Packard Co 8 * David Mosberger-Tang <davidm@hpl.hp.com> 9 */ 10 11#include <asm/asmmacro.h> 12 13#define a r2 14#define m r3 15#define lo r8 16#define hi r9 17#define t0 r16 18#define t1 r17 19#define seed r32 20 21GLOBAL_ENTRY(carta_random32) 22 movl a = (16807 << 16) | 16807 23 ;; 24 pmpyshr2.u t0 = a, seed, 0 25 pmpyshr2.u t1 = a, seed, 16 26 ;; 27 unpack2.l t0 = t1, t0 28 dep m = -1, r0, 0, 31 29 ;; 30 zxt4 lo = t0 31 shr.u hi = t0, 32 32 ;; 33 dep t0 = 0, hi, 15, 49 // t0 = (hi & 0x7fff) 34 ;; 35 shl t0 = t0, 16 // t0 = (hi & 0x7fff) << 16 36 shr t1 = hi, 15 // t1 = (hi >> 15) 37 ;; 38 add lo = lo, t0 39 ;; 40 cmp.gtu p6, p0 = lo, m 41 ;; 42(p6) and lo = lo, m 43 ;; 44(p6) add lo = 1, lo 45 ;; 46 add lo = lo, t1 47 ;; 48 cmp.gtu p6, p0 = lo, m 49 ;; 50(p6) and lo = lo, m 51 ;; 52(p6) add lo = 1, lo 53 br.ret.sptk.many rp 54END(carta_random32) 55