diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2023-08-17 17:23:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-17 09:23:52 -0700 |
| commit | e5f9a888e6f4424fe6da280175c3c1e64d948e33 (patch) | |
| tree | 27ab97e2396ca038b937fd58bc1181aa383ee6f2 /src/boot | |
| parent | c65a8dbc3903af19fe0253ab8774accbc06b0cb7 (diff) | |
qrand OK (#62)
* qrand OK
* refactor
* format
Diffstat (limited to 'src/boot')
| -rw-r--r-- | src/boot/libc64/qrand.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/boot/libc64/qrand.c b/src/boot/libc64/qrand.c new file mode 100644 index 0000000..ff25b67 --- /dev/null +++ b/src/boot/libc64/qrand.c @@ -0,0 +1,50 @@ +#include "libc64/qrand.h" + +u32 __qrand_itemp; +u32 __qrand_idum = 1; + +u32 qrand(void) { + __qrand_idum = __qrand_idum * 0x19660D + 0x3C6EF35F; + return __qrand_idum; +} + +void sqrand(u32 seed) { + __qrand_idum = seed; +} + +f32 fqrand(void) { + __qrand_idum = __qrand_idum * 0x19660D + 0x3C6EF35F; + __qrand_itemp = __qrand_idum >> 9 | 0x3F800000; + return *(float*)&__qrand_itemp - 1.0f; +} + +f32 fqrand2(void) { + __qrand_idum = __qrand_idum * 0x19660D + 0x3C6EF35F; + __qrand_itemp = __qrand_idum >> 9 | 0x3F800000; + return *(float*)&__qrand_itemp - 1.5f; +} + +void sqrand_r(u32* p, u32 val) { + *p = val; +} + +u32 qrand_r(u32* p) { + u32 t = *p * 0x19660D + 0x3C6EF35F; + + *p = t; + return t; +} + +f32 fqrand_r(u32* p) { + u32 t = *p * 0x19660D + 0x3C6EF35F; + + __qrand_itemp = (*p = t) >> 9 | 0x3F800000; + return *(float*)&__qrand_itemp - 1.0f; +} + +f32 fqrand2_r(u32* p) { + u32 t = *p * 0x19660D + 0x3C6EF35F; + + __qrand_itemp = (*p = t) >> 9 | 0x3F800000; + return *(float*)&__qrand_itemp - 1.5f; +} |
