TempleOSCDV4.13.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:48:03 +02:00
1 parent b84bbff6db
commit 122df6338e
78 files changed
+3570 -2729

No files matched your search

+40 -21
View File
@@ -71,58 +71,77 @@ I64 CeilI64(I64 num,I64 to)
}
//See $LK,"::/Doc/Credits.DD"$.
#define LIN_CONGRUE_A 6364136223846793005
#define LIN_CONGRUE_C 1442695040888963407
I16 RandI16()
{//Random I16.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed.i16[0];
res^=GetTSC;
Fs->rand_seed=res;
return res.i16[0];
}
U16 RandU16()
{//Random U16.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed.u16[0];
res^=GetTSC;
Fs->rand_seed=res;
return res.u16[0];
}
I32 RandI32()
{//Random I32.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed.i32[0];
res^=GetTSC;
Fs->rand_seed=res;
return res.i32[0];
}
U32 RandU32()
{//Random U32.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed.u32[0];
res^=GetTSC;
Fs->rand_seed=res;
return res.u32[0];
}
I64 RandI64()
{//Random I64.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed;
res^=GetTSC;
Fs->rand_seed=res;
return res;
}
U64 RandU64()
{//Random U64.
Fs->rand_seed=6364136223846793005*Fs->rand_seed+1442695040888963407;
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
Fs->rand_seed^=GetTSC>>4;
return Fs->rand_seed;
res^=GetTSC;
Fs->rand_seed=res;
return res;
}
F64 Rand()
{//Random F64.
I64 res=RandI64&0x3FFFFFFFFFFFFFFF;
return res/ToF64(0x4000000000000000);
I64 res=Fs->rand_seed;
res=LIN_CONGRUE_A*res^(res&0xFFFFFFFF0000)>>16+LIN_CONGRUE_C;
if (!Bt(&Fs->task_flags,TASKf_NONTIMER_RAND))
res^=GetTSC;
Fs->rand_seed=res;
return (res&0x3FFFFFFFFFFFFFFF)/ToF64(0x4000000000000000);
}
I64 Seed(I64 seed=0,CTask *task=NULL)
@@ -133,6 +152,6 @@ I64 Seed(I64 seed=0,CTask *task=NULL)
return task->rand_seed=seed;
} else {
LBtr(&task->task_flags,TASKf_NONTIMER_RAND);
return task->rand_seed=GetTSC>>4;
return task->rand_seed^=GetTSC;
}
}