Changeset 13857
- Timestamp:
- Jun 18, 2010, 1:36:23 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/arm/level-0/ARM/arm-numbers.lisp
r13806 r13857 242 242 243 243 244 #+notyet245 244 (defarmlapfunction %mrg31k3p ((state arg_z)) 246 (let ((seed temp0)) 245 (let ((seed temp0) 246 (m1 #x7fffffff)) 247 247 (svref seed 1 state) 248 248 (u32-ref imm0 1 seed) 249 (u32-ref imm3 2 seed) 250 (rlwinm imm1 imm0 22 1 9) 251 (srwi imm2 imm0 9) 252 (add imm0 imm1 imm2) 253 254 ;; construct m1 (1- (expt 2 31)) 255 (lis imm1 #x7fff) 256 (ori imm1 imm1 #xffff) 257 258 (rlwinm imm4 imm3 7 1 24) 259 (srwi imm5 imm3 24) 260 (add imm0 imm0 imm4) 261 (add imm0 imm0 imm5) 262 263 ;; reduce mod m1 264 (cmplw cr7 imm0 imm1) 265 (blt cr7 @ok1) 266 (sub imm0 imm0 imm1) 267 @ok1 268 269 (add imm0 imm0 imm3) 270 271 ;; reduce mod m1 272 (cmplw cr7 imm0 imm1) 273 (blt cr7 @ok2) 274 (sub imm0 imm0 imm1) 275 @ok2 276 277 ;; update state 278 (u32-ref imm1 1 seed) 279 (u32-set imm1 2 seed) 280 (u32-ref imm1 0 seed) 281 (u32-set imm1 1 seed) 282 (u32-set imm0 0 seed) 283 284 ;; construct m2 (- (expt 2 31) 21069)) 285 (lis imm5 #x7fff) 286 (ori imm5 imm5 44467) 249 250 (mov imm1 (:lsr imm0 (:$ 9))) 251 (mov imm2 (:lsl imm0 (:$ 23))) ;get low 9 bits 252 (mov imm2 (:lsr imm2 (:$ 23))) 253 (add imm1 imm1 (:lsl imm2 (:$ 22))) 254 255 (u32-ref imm0 2 seed) 256 (add imm1 imm1 (:lsr imm0 (:$ 24))) 257 (bic imm2 imm0 (:$ #xff000000)) 258 (add imm1 imm1 (:lsl imm2 (:$ 7))) 259 260 (cmp imm1 (:$ m1)) 261 (subhi imm1 imm1 (:$ m1)) 262 263 (add imm1 imm1 imm0) 264 (cmp imm1 (:$ m1)) 265 (subhi imm1 imm1 (:$ m1)) 266 267 (u32-ref imm0 1 seed) 268 (u32-set imm0 2 seed) 269 (u32-ref imm0 0 seed) 270 (u32-set imm0 1 seed) 271 (u32-set imm1 0 seed) 287 272 288 273 ;; second component 289 274 (u32-ref imm0 3 seed) 290 (rlwinm imm1 imm0 15 1 16) 291 (srwi imm2 imm0 16) 292 (mulli imm2 imm2 21069) 293 (add imm0 imm1 imm2) 294 295 ;; reduce mod m2 296 (cmplw cr7 imm0 imm5) 297 (blt cr7 @ok3) 298 (sub imm0 imm0 imm5) 299 @ok3 300 301 (u32-ref imm1 5 seed) 302 (rlwinm imm2 imm1 15 1 16) 303 (srwi imm3 imm1 16) 304 (mulli imm3 imm3 21069) 305 (add imm2 imm2 imm3) 306 307 ;; reduce mod m2 308 (cmplw cr7 imm2 imm5) 309 (blt cr7 @ok4) 310 (sub imm2 imm2 imm5) 311 @ok4 312 313 (add imm2 imm1 imm2) 314 (cmplw cr7 imm2 imm5) 315 (blt cr7 @ok5) 316 (sub imm2 imm2 imm5) 317 @ok5 318 319 (add imm2 imm2 imm0) 320 (cmplw cr7 imm2 imm5) 321 (blt cr7 @ok6) 322 (sub imm2 imm2 imm5) 323 @ok6 324 325 ;; update state 275 (mov imm1 (:$ 20992)) 276 (add imm1 imm1 (:$ 77)) 277 (mov imm2 (:lsr imm0 (:$ 16))) 278 (mul imm2 imm1 imm2) 279 (mov imm0 (:lsl imm0 (:$ 16))) 280 (add imm0 imm2 (:lsr imm0 (:$ 1))) 281 282 (ldr imm2 (:= @m2)) 283 (cmp imm0 imm2) 284 (subhi imm0 imm0 imm2) 285 286 (vpush1 rcontext) 287 (mov rcontext imm0) ;save t1 288 289 (u32-ref imm0 5 seed) 290 (mov imm2 (:lsr imm0 (:$ 16))) 291 (mul imm2 imm1 imm2) ;21069 still in imm1 292 (mov imm1 (:lsl imm0 (:$ 16))) 293 (add imm1 imm2 (:lsr imm1 (:$ 1))) 294 295 (ldr imm2 (:= @m2)) 296 (cmp imm1 imm2) 297 (subhi imm1 imm1 imm2) 298 299 (add imm1 imm1 imm0) 300 (cmp imm1 imm2) 301 (subhi imm1 imm1 imm2) 302 303 (add imm1 imm1 rcontext) ;add in t1 from back when 304 (vpop1 rcontext) 305 (cmp imm1 imm2) 306 (subhi imm1 imm1 imm2) 307 326 308 (u32-ref imm0 4 seed) 327 309 (u32-set imm0 5 seed) 328 310 (u32-ref imm0 3 seed) 329 311 (u32-set imm0 4 seed) 330 (u32-set imm2 3 seed) 331 332 ;; construct m1 (1- (expt 2 31)) 333 (lis imm5 #x7fff) 334 (ori imm5 imm5 #xffff) 312 (u32-set imm1 3 seed) 335 313 336 314 ;; combination 337 315 (u32-ref imm0 0 seed) 338 (cmplw cr7 imm0 imm2) 339 (sub imm0 imm0 imm2) 340 (bgt cr7 @finish) 341 (add imm0 imm0 imm5) 342 @finish 343 (bic imm0 imm0 (:$ #xe0000000)) ;don't want negative fixnums 344 (box-fixnum arg_z imm0) 345 (blr))) 316 (sub imm2 imm0 imm1) 317 (cmp imm0 imm1) 318 (addls imm2 imm2 (:$ m1)) 319 (bic imm2 imm2 (:$ #xe0000000)) ;avoid negative fixnums 320 (box-fixnum arg_z imm2) 321 (bx lr)) 322 323 (:data) 324 @m2 325 (:word 2147462579)) 346 326 347 327 ; End of arm-numbers.lisp
Note: See TracChangeset
for help on using the changeset viewer.