~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to xen/arch/ia64/linux/carta_random.S

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
21
GLOBAL_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
 
54
END(carta_random32)