/*1* Fast, simple, yet decent quality random number generator based on2* a paper by David G. Carta ("Two Fast Implementations of the3* `Minimal Standard' Random Number Generator," Communications of the4* ACM, January, 1990).5*6* Copyright (C) 2002 Hewlett-Packard Co7* David Mosberger-Tang <[email protected]>8*/910#include <asm/asmmacro.h>1112#define a r213#define m r314#define lo r815#define hi r916#define t0 r1617#define t1 r1718#define seed r321920GLOBAL_ENTRY(carta_random32)21movl a = (16807 << 16) | 1680722;;23pmpyshr2.u t0 = a, seed, 024pmpyshr2.u t1 = a, seed, 1625;;26unpack2.l t0 = t1, t027dep m = -1, r0, 0, 3128;;29zxt4 lo = t030shr.u hi = t0, 3231;;32dep t0 = 0, hi, 15, 49 // t0 = (hi & 0x7fff)33;;34shl t0 = t0, 16 // t0 = (hi & 0x7fff) << 1635shr t1 = hi, 15 // t1 = (hi >> 15)36;;37add lo = lo, t038;;39cmp.gtu p6, p0 = lo, m40;;41(p6) and lo = lo, m42;;43(p6) add lo = 1, lo44;;45add lo = lo, t146;;47cmp.gtu p6, p0 = lo, m48;;49(p6) and lo = lo, m50;;51(p6) add lo = 1, lo52br.ret.sptk.many rp53END(carta_random32)545556