summaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
authorPrakxo <87568477+Prakxo@users.noreply.github.com>2023-08-17 17:23:52 +0100
committerGitHub <noreply@github.com>2023-08-17 09:23:52 -0700
commite5f9a888e6f4424fe6da280175c3c1e64d948e33 (patch)
tree27ab97e2396ca038b937fd58bc1181aa383ee6f2 /src/boot
parentc65a8dbc3903af19fe0253ab8774accbc06b0cb7 (diff)
qrand OK (#62)
* qrand OK * refactor * format
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/libc64/qrand.c50
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;
+}