;---------------------------------------------------
; r0 ← (31-bit 乱数値)
;---------------------------------------------------
102a08: b430 push {r4, r5}
102a0a: 490c ldr r1, [pc, #48] ; (0x102a3c)
102a0c: 680c ldr r4, [r1, #0]
102a0e: 684a ldr r2, [r1, #4]
102a10: 6823 ldr r3, [r4, #0]
102a12: 6810 ldr r0, [r2, #0]
102a14: 18c0 adds r0, r0, r3
102a16: 6010 str r0, [r2, #0]
102a18: 1d24 adds r4, r4, #4
102a1a: 1d12 adds r2, r2, #4
102a1c: 428c cmp r4, r1
102a1e: d207 bcs.n 0x102a30
102a20: 428a cmp r2, r1
102a22: d208 bcs.n 0x102a36
102a24: 600c str r4, [r1, #0]
102a26: 604a str r2, [r1, #4]
102a28: bc30 pop {r4, r5}
102a2a: 0040 lsls r0, r0, #1
102a2c: 0840 lsrs r0, r0, #1 ; r0 &= 0x7fffffff
102a2e: 4770 bx lr
102a30: 000c movs r4, r1
102a32: 3cdc subs r4, #220 ; 0xdc
102a34: e7f6 b.n 0x102a24
102a36: 000a movs r2, r1
102a38: 3adc subs r2, #220 ; 0xdc
102a3a: e7f3 b.n 0x102a24
102a3c: 00603a18
;-----------------------------------------------
; 内部状態の初期化
;-----------------------------------------------
1002ac: e28fc001 add ip, pc, #1
1002b0: e12fff1c bx ip
1002b4: 4a0b ldr r2, [pc, #44] ; (0x1002e4)
1002b6: b530 push {r4, r5, lr}
1002b8: 0011 movs r1, r2
1002ba: 3160 adds r1, #96 ; 0x60
1002bc: 000b movs r3, r1
1002be: 3bdc subs r3, #220 ; 0xdc
1002c0: c10c stmia r1!, {r2, r3}
1002c2: 4c09 ldr r4, [pc, #36] ; (0x1002e8)
1002c4: 2137 movs r1, #55 ; 0x37
1002c6: e006 b.n 0x1002d6
;
1002c8: 0c02 lsrs r2, r0, #16
1002ca: 008d lsls r5, r1, #2
1002cc: 1812 adds r2, r2, r0
1002ce: 515a str r2, [r3, r5]
1002d0: 4a06 ldr r2, [pc, #24] ; (0x1002ec)
1002d2: 4350 muls r0, r2
1002d4: 1900 adds r0, r0, r4
;
1002d6: 000a movs r2, r1
1002d8: 1e49 subs r1, r1, #1
1002da: 2a00 cmp r2, #0
1002dc: dcf4 bgt.n 0x1002c8
;
1002de: bd30 pop {r4, r5, pc}
;
1002e0: e7e72001
1002e4: 006039b8
1002e8: 66d619e1
1002ec: 00010dcd
;---------------------------------------------------
; r0 ← 乱数 r0〜r1
;---------------------------------------------------
1adb0c: e92d4010 push {r4, lr}
1adb10: e1500001 cmp r0, r1
1adb14: e1a04000 mov r4, r0
1adb18: c1a04001 movgt r4, r1
1adb1c: c1a01000 movgt r1, r0
1adb20: e0410004 sub r0, r1, r4
1adb24: e2900001 adds r0, r0, #1
1adb28: 1b0866c6 blne 0x3c7648
1adb2c: e0800004 add r0, r0, r4
1adb30: e8bd8010 pop {r4, pc}
;---------------------------------------------------
; s0 ← 乱数 [s16, s17) (or [s17, s16))
;---------------------------------------------------
1ae358: e92d4010 push {r4, lr}
1ae35c: ed2d8b02 vpush {d8}
1ae360: eef08a60 vmov.f32 s17, s1
1ae364: eeb08a40 vmov.f32 s16, s0
1ae368: eeb48ae8 vcmpe.f32 s16, s17
1ae36c: eef1fa10 vmrs APSR_nzcv, fpscr
1ae370: da000002 ble 0x1ae380
1ae374: eeb00a48 vmov.f32 s0, s16
1ae378: eeb08a68 vmov.f32 s16, s17
1ae37c: eef08a40 vmov.f32 s17, s0
1ae380: eb0864bb bl 0x3c7674
1ae384: ee780ac8 vsub.f32 s1, s17, s16
1ae388: ee008a20 vmla.f32 s16, s0, s1
1ae38c: eeb00a48 vmov.f32 s0, s16
1ae390: ecbd8b02 vpop {d8}
1ae394: e8bd8010 pop {r4, pc}
;---------------------------------------------------
; r0 ← 乱数 0〜(r0-1)
;---------------------------------------------------
3c7648: e92d4010 push {r4, lr}
3c764c: e1a04000 mov r4, r0
3c7650: faf4ecec blx 0x102a08
3c7654: e59f2010 ldr r2, [pc, #16] ; 0x3c766c
3c7658: e1a01004 mov r1, r4
3c765c: e5820000 str r0, [r2]
3c7660: ebfce42c bl 0x300718
3c7664: e1a00001 mov r0, r1
3c7668: e8bd8010 pop {r4, pc}
3c766c: 005b2e50
;---------------------------------------------------
; s0 ← 乱数 [0.0, 1.0)
;---------------------------------------------------
3c7674: e92d4010 push {r4, lr}
3c7678: faf4ece2 blx 0x102a08
3c767c: ee000a10 vmov s0, r0
3c7680: eddf0a04 vldr s1, [pc, #16] ; 0x3c7698
3c7684: e59f1010 ldr r1, [pc, #16] ; 0x3c769c
3c7688: eeb80ac0 vcvt.f32.s32 s0, s0
3c768c: e5810000 str r0, [r1]
3c7690: ee200a20 vmul.f32 s0, s0, s1
3c7694: e8bd8010 pop {r4, pc}
3c7698: 30000000 ; 1. / 2^{31}
3c769c: 005b2e50