Changeset 13319


Ignore:
Timestamp:
Dec 22, 2009, 4:28:15 AM (10 years ago)
Author:
rme
Message:

Version of %mrg31k3p in ppc32 lap.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/new-random/level-0/PPC/ppc-numbers.lisp

    r13067 r13319  
    438438    (beq cr0 @shiftv)
    439439    (b @loop)))
     440
     441(defppclapfunction %mrg31k3p ((state arg_z))
     442  (let ((seed temp0))
     443    (svref seed 1 state)
     444    (svref imm0 1 seed)
     445    (svref imm3 2 seed)
     446    (rlwinm imm1 imm0 22 1 9)
     447    (srwi imm2 imm0 9)
     448    (add imm0 imm1 imm2)
    440449   
    441 
    442 
     450    ;; construct m1 (1- (expt 2 31))
     451    (lis imm1 #x7fff)
     452    (ori imm1 imm1 #xffff)
     453
     454    (rlwinm imm4 imm3 7 1 24)
     455    (srwi imm5 imm3 24)
     456    (add imm0 imm0 imm4)
     457    (add imm0 imm0 imm5)
     458
     459    ;; reduce mod m1
     460    (cmplw cr7 imm0 imm1)
     461    (blt cr7 @ok1)
     462    (sub imm0 imm0 imm1)
     463    @ok1
     464
     465    (add imm0 imm0 imm3)
     466
     467    ;; reduce mod m1
     468    (cmplw cr7 imm0 imm1)
     469    (blt cr7 @ok2)
     470    (sub imm0 imm0 imm1)
     471    @ok2
     472
     473    ;; update state
     474    (svref imm1 1 seed)
     475    (svset imm1 2 seed)
     476    (svref imm1 0 seed)
     477    (svset imm1 1 seed)
     478    (svset imm0 0 seed)
     479
     480    ;; construct m2 (- (expt 2 31) 21069))
     481    (lis imm5 #x7fff)
     482    (ori imm5 imm5 44467)
     483
     484    ;; second component
     485    (svref imm0 3 seed)
     486    (rlwinm imm1 imm0 15 1 16)
     487    (srwi imm2 imm0 16)
     488    (mulli imm2 imm2 21069)
     489    (add imm0 imm1 imm2)
     490
     491    ;; reduce mod m2
     492    (cmplw cr7 imm0 imm5)
     493    (blt cr7 @ok3)
     494    (sub imm0 imm0 imm5)
     495    @ok3
     496
     497    (svref imm1 5 seed)
     498    (rlwinm imm2 imm1 15 1 16)
     499    (srwi imm3 imm1 16)
     500    (mulli imm3 imm3 21069)
     501    (add imm2 imm2 imm3)
     502
     503    ;; reduce mod m2
     504    (cmplw cr7 imm2 imm5)
     505    (blt cr7 @ok4)
     506    (sub imm2 imm2 imm5)
     507    @ok4
     508
     509    (add imm2 imm1 imm2)
     510    (cmplw cr7 imm2 imm5)
     511    (blt cr7 @ok5)
     512    (sub imm2 imm2 imm5)
     513    @ok5
     514
     515    (add imm2 imm2 imm0)
     516    (cmplw cr7 imm2 imm5)
     517    (blt cr7 @ok6)
     518    (sub imm2 imm2 imm5)
     519    @ok6
     520
     521    ;; update state
     522    (svref imm0 4 seed)
     523    (svset imm0 5 seed)
     524    (svref imm0 3 seed)
     525    (svset imm0 4 seed)
     526    (svset imm2 3 seed)
     527
     528    ;; combination
     529    (svref imm0 0 seed)
     530    (cmplw cr7 imm0 imm2)
     531    (sub imm0 imm0 imm2)
     532    (bgt cr7 @finish)
     533    (add imm0 imm0 imm5)
     534    @finish
     535    (clrlwi imm0 imm0 3)                ;don't want negative fixnums
     536    (box-fixnum arg_z imm0)
     537    (blr)))   
    443538
    444539; End of ppc-numbers.lisp
Note: See TracChangeset for help on using the changeset viewer.