mirror of
https://frontier.innolan.net/github/amigaos-cross-toolchain6.git
synced 2024-10-19 10:29:55 +00:00
236 lines
3.3 KiB
ArmAsm
236 lines
3.3 KiB
ArmAsm
#NO_APP
|
|
.text
|
|
.align 2
|
|
.globl _rand64
|
|
_rand64:
|
|
movem.l #16188,-(sp)
|
|
lea _b,a3
|
|
move.l (a3),a0
|
|
move.l 4(a3),a2
|
|
move.l a2,d1
|
|
moveq #25,d0
|
|
lsr.l d0,d1
|
|
move.l a0,d2
|
|
lsl.l #7,d2
|
|
move.l d1,d0
|
|
or.l d2,d0
|
|
move.l a0,d2
|
|
moveq #25,d1
|
|
lsr.l d1,d2
|
|
move.l a2,d3
|
|
lsl.l #7,d3
|
|
move.l d2,d1
|
|
or.l d3,d1
|
|
move.l _a,d3
|
|
move.l _a+4,d4
|
|
sub.l d1,d4
|
|
subx.l d0,d3
|
|
move.l d3,a4
|
|
move.l d4,a5
|
|
move.l _c,d4
|
|
move.l _c+4,d5
|
|
move.l d5,d0
|
|
clr.w d0
|
|
swap d0
|
|
lsr.w #3,d0
|
|
move.l d4,d1
|
|
moveq #13,d2
|
|
lsl.l d2,d1
|
|
or.l d1,d0
|
|
move.l d0,a1
|
|
move.l d4,d1
|
|
clr.w d1
|
|
swap d1
|
|
lsr.w #3,d1
|
|
move.l d5,d0
|
|
lsl.l d2,d0
|
|
or.l d0,d1
|
|
move.l a1,d6
|
|
move.l a0,d0
|
|
eor.l d0,d6
|
|
move.l a2,d7
|
|
eor.l d1,d7
|
|
move.l d6,_a
|
|
move.l d7,_a+4
|
|
move.l _d,d2
|
|
move.l _d+4,d3
|
|
move.l d2,d0
|
|
lsl.l #5,d0
|
|
move.l d0,a0
|
|
move.l d3,d0
|
|
moveq #27,d1
|
|
lsr.l d1,d0
|
|
move.l a0,d1
|
|
or.l d0,d1
|
|
move.l d1,a1
|
|
move.l d3,d0
|
|
lsl.l #5,d0
|
|
move.l d0,a0
|
|
move.l d2,d1
|
|
moveq #27,d0
|
|
lsr.l d0,d1
|
|
move.l a0,d0
|
|
or.l d1,d0
|
|
move.l d0,a0
|
|
move.l a0,d0
|
|
move.l a1,d1
|
|
add.l d5,d1
|
|
addx.l d4,d0
|
|
move.l d0,(a3)
|
|
move.l d1,4(a3)
|
|
move.l a4,d0
|
|
move.l a5,d1
|
|
add.l d3,d1
|
|
addx.l d2,d0
|
|
move.l d0,_c
|
|
move.l d1,_c+4
|
|
move.l a4,d0
|
|
move.l a5,d1
|
|
add.l d7,d1
|
|
addx.l d6,d0
|
|
move.l d0,_d
|
|
move.l d1,_d+4
|
|
movem.l (sp)+,#15612
|
|
rts
|
|
.align 2
|
|
.globl _rkissSeed
|
|
_rkissSeed:
|
|
lea (-32,sp),sp
|
|
movem.l #16188,-(sp)
|
|
move.l 76(sp),a5
|
|
cmp.w #0,a5
|
|
jeq .L6
|
|
clr.l _a
|
|
move.l #-236298515,_a+4
|
|
clr.l _d
|
|
move.l #-723440521,_d+4
|
|
clr.l _c
|
|
move.l #-723440521,_c+4
|
|
clr.l _b
|
|
move.l #-723440521,_b+4
|
|
cmp.w #0,a5
|
|
jle .L2
|
|
clr.l d2
|
|
move.l #-723440521,d3
|
|
move.l d2,d4
|
|
move.l d3,d5
|
|
move.l d2,d0
|
|
move.l d3,d1
|
|
clr.l d6
|
|
move.l #-236298515,d7
|
|
sub.l a1,a1
|
|
move.l a1,a0
|
|
move.l d6,48(sp)
|
|
move.l d7,52(sp)
|
|
move.l d2,40(sp)
|
|
move.l d3,44(sp)
|
|
move.l a5,68(sp)
|
|
.L4:
|
|
move.l d1,d2
|
|
moveq #25,d3
|
|
lsr.l d3,d2
|
|
move.l d0,d6
|
|
lsl.l #7,d6
|
|
or.l d6,d2
|
|
move.l d2,a4
|
|
move.l d0,d6
|
|
lsr.l d3,d6
|
|
move.l d1,d2
|
|
lsl.l #7,d2
|
|
or.l d2,d6
|
|
move.l d6,a5
|
|
move.l 48(sp),d6
|
|
move.l 52(sp),d7
|
|
move.l a4,d2
|
|
sub.l a5,d7
|
|
subx.l d2,d6
|
|
move.l d6,a2
|
|
move.l d7,a3
|
|
move.l d5,d3
|
|
clr.w d3
|
|
swap d3
|
|
lsr.w #3,d3
|
|
move.l d4,d2
|
|
moveq #13,d7
|
|
lsl.l d7,d2
|
|
or.l d2,d3
|
|
move.l d4,d2
|
|
clr.w d2
|
|
swap d2
|
|
lsr.w #3,d2
|
|
move.l d5,d6
|
|
lsl.l d7,d6
|
|
or.l d6,d2
|
|
eor.l d0,d3
|
|
move.l d3,48(sp)
|
|
eor.l d1,d2
|
|
move.l d2,52(sp)
|
|
move.l 40(sp),d1
|
|
lsl.l #5,d1
|
|
move.l 44(sp),d0
|
|
moveq #27,d2
|
|
lsr.l d2,d0
|
|
or.l d0,d1
|
|
move.l d1,60(sp)
|
|
move.l 44(sp),d1
|
|
lsl.l #5,d1
|
|
move.l 40(sp),d0
|
|
lsr.l d2,d0
|
|
or.l d0,d1
|
|
move.l d1,56(sp)
|
|
move.l 56(sp),d0
|
|
move.l 60(sp),d1
|
|
add.l d5,d1
|
|
addx.l d4,d0
|
|
move.l 40(sp),d4
|
|
move.l 44(sp),d5
|
|
move.l a2,d6
|
|
add.l a3,d5
|
|
addx.l d6,d4
|
|
move.l 48(sp),d2
|
|
move.l 52(sp),d3
|
|
move.l a2,d6
|
|
add.l a3,d3
|
|
addx.l d6,d2
|
|
move.l d2,40(sp)
|
|
move.l d3,44(sp)
|
|
addq.l #1,a0
|
|
cmp.l 68(sp),a0
|
|
jlt .L4
|
|
move.l 48(sp),d6
|
|
move.l 52(sp),d7
|
|
move.l d6,_a
|
|
move.l d7,_a+4
|
|
move.l d0,_b
|
|
move.l d1,_b+4
|
|
move.l d4,_c
|
|
move.l d5,_c+4
|
|
move.l d2,_d
|
|
move.l d3,_d+4
|
|
.L2:
|
|
movem.l (sp)+,#15612
|
|
lea (32,sp),sp
|
|
rts
|
|
.L6:
|
|
move.w #73,a1
|
|
clr.l d2
|
|
move.l #-723440521,d3
|
|
move.l d2,d4
|
|
move.l d3,d5
|
|
move.l d2,d0
|
|
move.l d3,d1
|
|
clr.l d6
|
|
move.l #-236298515,d7
|
|
sub.l a2,a2
|
|
move.l a2,a0
|
|
move.l d6,48(sp)
|
|
move.l d7,52(sp)
|
|
move.l d2,40(sp)
|
|
move.l d3,44(sp)
|
|
move.l a1,68(sp)
|
|
jra .L4
|
|
.lcomm _d,8
|
|
.lcomm _c,8
|
|
.lcomm _b,8
|
|
.lcomm _a,8
|