Ignore:
Timestamp:
Dec 22, 2009, 12:08:00 AM (10 years ago)
Author:
rme
Message:

Version of %mrg31k3p in x8664 lap.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/new-random/level-0/X86/x86-numbers.lisp

    r13067 r13317  
    190190    (single-value-return)))
    191191
    192 
     192(defx86lapfunction %mrg31k3p ((state arg_z))
     193  (let ((seed temp0)
     194        (m1 #x7fffffff)
     195        (m2 #x7fffadb3)
     196        (negative-m1 #x80000001)
     197        (negative-m2 #x8000524d))
     198    (svref state 1 seed)
     199    (movl (@ (+ x8664::misc-data-offset (* 4 1)) (% seed)) (% imm0.l))
     200    (andl ($ #x1ff) (% imm0.l))
     201    (shll ($ 22) (% imm0.l))
     202    (movl (@ (+ x8664::misc-data-offset (* 4 1)) (% seed)) (% imm1.l))
     203    (shrl ($ 9) (% imm1.l))
     204    (addl (% imm1.l) (% imm0.l))
     205
     206    (movl (@ (+ x8664::misc-data-offset (* 4 2)) (% seed)) (% imm1.l))
     207    (andl ($ #xffffff) (% imm1.l))
     208    (shll ($ 7) (% imm1.l))
     209    (addl (% imm1.l) (% imm0.l))
     210    (movl (@ (+ x8664::misc-data-offset (* 4 2)) (% seed)) (% imm1.l))
     211    (shrl ($ 24) (% imm1.l))
     212
     213    (addl (% imm1.l) (% imm0.l))
     214    (leal (@ negative-m1 (% imm0.l)) (% imm1.l))
     215    (cmpl ($ m1) (% imm0.l))
     216    (cmovael (% imm1.l) (% imm0.l))
     217
     218    (addl (@ (+ x8664::misc-data-offset (* 4 2)) (% seed)) (% imm0.l))
     219    (leal (@ negative-m1 (% imm0.l)) (% imm1.l))
     220    (cmpl ($ m1) (% imm0.l))
     221    (cmovael (% imm1.l) (% imm0.l))
     222
     223    ;; update state
     224    (movl (@ (+ x8664::misc-data-offset (* 4 1)) (% seed)) (% imm1.l))
     225    (movl (% imm1.l) (@ (+ x8664::misc-data-offset (* 4 2)) (% seed)))
     226    (movl (@ (+ x8664::misc-data-offset (* 4 0)) (% seed)) (% imm1.l))
     227    (movl (% imm1.l) (@ (+ x8664::misc-data-offset (* 4 1)) (% seed)))
     228    (movl (% imm0.l) (@ (+ x8664::misc-data-offset (* 4 0)) (% seed)))
     229
     230    ;; second component
     231    (movl (@ (+ x8664::misc-data-offset (* 4 3)) (% seed)) (% imm0.l))
     232    (andl ($ #xffff) (% imm0.l))
     233    (shll ($ 15) (% imm0.l))
     234    (movl (@ (+ x8664::misc-data-offset (* 4 3)) (% seed)) (% imm1.l))
     235    (shrl ($ 16) (% imm1.l))
     236    (imull ($ 21069) (% imm1.l) (% imm1.l))
     237
     238    (addl (% imm1.l) (% imm0.l))
     239    (leal (@ negative-m2 (% imm0.l)) (% imm1.l))
     240    (cmpl ($ m2) (% imm0.l))
     241    (cmovael (% imm1.l) (% imm0.l))
     242
     243    (movl (% imm0.l) (% imm2.l))        ;stash t1
     244
     245    (movl (@ (+ x8664::misc-data-offset (* 4 5)) (% seed)) (% imm0.l))
     246    (andl ($ #xffff) (% imm0.l))
     247    (shll ($ 15) (% imm0.l))
     248    (movl (@ (+ x8664::misc-data-offset (* 4 5)) (% seed)) (% imm1.l))
     249    (shrl ($ 16) (% imm1.l))
     250    (imull ($ 21069) (% imm1.l) (% imm1.l))
     251
     252    (addl (% imm1.l) (% imm0.l))
     253    (leal (@ negative-m2 (% imm0.l)) (% imm1.l))
     254    (cmpl ($ m2) (% imm0.l))
     255    (cmovael (% imm1.l) (% imm0.l))
     256
     257    (addl (@ (+ x8664::misc-data-offset (* 4 5)) (% seed)) (% imm0.l))
     258    (leal (@ negative-m2 (% imm0.l)) (% imm1.l))
     259    (cmpl ($ m2) (% imm0.l))
     260    (cmovael (% imm1.l) (% imm0.l))
     261
     262    (addl (% imm2.l) (% imm0.l))        ;add in t1
     263    (leal (@ negative-m2 (% imm0.l)) (% imm1.l))
     264    (cmpl ($ m2) (% imm0.l))
     265    (cmovael (% imm1.l) (% imm0.l))
     266
     267    ;; update state
     268    (movl (@ (+ x8664::misc-data-offset (* 4 4)) (% seed)) (% imm1.l))
     269    (movl (% imm1.l) (@ (+ x8664::misc-data-offset (* 4 5)) (% seed)))
     270    (movl (@ (+ x8664::misc-data-offset (* 4 3)) (% seed)) (% imm1.l))
     271    (movl (% imm1.l) (@ (+ x8664::misc-data-offset (* 4 4)) (% seed)))
     272    (movl (% imm0.l) (@ (+ x8664::misc-data-offset (* 4 3)) (% seed)))
     273
     274    ;; combination
     275    (movl (@ (+ x8664::misc-data-offset (* 4 0)) (% seed)) (% imm1.l))
     276    (xchgl (% imm1.l) (% imm0.l))               ;for sanity
     277    (rcmpl (% imm0.l) (% imm1.l))
     278    (ja @ok)
     279    (subl (% imm1.l) (% imm0.l))
     280    (addl ($ m1) (% imm0.l))
     281    (box-fixnum imm0 arg_z)
     282    (single-value-return)
     283    @ok
     284    (subl (% imm1.l) (% imm0.l))
     285    (box-fixnum imm0 arg_z)
     286    (single-value-return)))
    193287
    194288;;; End of x86-numbers.lisp
Note: See TracChangeset for help on using the changeset viewer.