cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

timeconst.bc (3093B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3scale=0
      4
      5define gcd(a,b) {
      6	auto t;
      7	while (b) {
      8		t = b;
      9		b = a % b;
     10		a = t;
     11	}
     12	return a;
     13}
     14
     15/* Division by reciprocal multiplication. */
     16define fmul(b,n,d) {
     17       return (2^b*n+d-1)/d;
     18}
     19
     20/* Adjustment factor when a ceiling value is used.  Use as:
     21   (imul * n) + (fmulxx * n + fadjxx) >> xx) */
     22define fadj(b,n,d) {
     23	auto v;
     24	d = d/gcd(n,d);
     25	v = 2^b*(d-1)/d;
     26	return v;
     27}
     28
     29/* Compute the appropriate mul/adj values as well as a shift count,
     30   which brings the mul value into the range 2^b-1 <= x < 2^b.  Such
     31   a shift value will be correct in the signed integer range and off
     32   by at most one in the upper half of the unsigned range. */
     33define fmuls(b,n,d) {
     34	auto s, m;
     35	for (s = 0; 1; s++) {
     36		m = fmul(s,n,d);
     37		if (m >= 2^(b-1))
     38			return s;
     39	}
     40	return 0;
     41}
     42
     43define timeconst(hz) {
     44	print "/* Automatically generated by kernel/time/timeconst.bc */\n"
     45	print "/* Time conversion constants for HZ == ", hz, " */\n"
     46	print "\n"
     47
     48	print "#ifndef KERNEL_TIMECONST_H\n"
     49	print "#define KERNEL_TIMECONST_H\n\n"
     50
     51	print "#include <linux/param.h>\n"
     52	print "#include <linux/types.h>\n\n"
     53
     54	print "#if HZ != ", hz, "\n"
     55	print "#error \qinclude/generated/timeconst.h has the wrong HZ value!\q\n"
     56	print "#endif\n\n"
     57
     58	if (hz < 2) {
     59		print "#error Totally bogus HZ value!\n"
     60	} else {
     61		s=fmuls(32,1000,hz)
     62		obase=16
     63		print "#define HZ_TO_MSEC_MUL32\tU64_C(0x", fmul(s,1000,hz), ")\n"
     64		print "#define HZ_TO_MSEC_ADJ32\tU64_C(0x", fadj(s,1000,hz), ")\n"
     65		obase=10
     66		print "#define HZ_TO_MSEC_SHR32\t", s, "\n"
     67
     68		s=fmuls(32,hz,1000)
     69		obase=16
     70		print "#define MSEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000), ")\n"
     71		print "#define MSEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000), ")\n"
     72		obase=10
     73		print "#define MSEC_TO_HZ_SHR32\t", s, "\n"
     74
     75		obase=10
     76		cd=gcd(hz,1000)
     77		print "#define HZ_TO_MSEC_NUM\t\t", 1000/cd, "\n"
     78		print "#define HZ_TO_MSEC_DEN\t\t", hz/cd, "\n"
     79		print "#define MSEC_TO_HZ_NUM\t\t", hz/cd, "\n"
     80		print "#define MSEC_TO_HZ_DEN\t\t", 1000/cd, "\n"
     81		print "\n"
     82
     83		s=fmuls(32,1000000,hz)
     84		obase=16
     85		print "#define HZ_TO_USEC_MUL32\tU64_C(0x", fmul(s,1000000,hz), ")\n"
     86		print "#define HZ_TO_USEC_ADJ32\tU64_C(0x", fadj(s,1000000,hz), ")\n"
     87		obase=10
     88		print "#define HZ_TO_USEC_SHR32\t", s, "\n"
     89
     90		s=fmuls(32,hz,1000000)
     91		obase=16
     92		print "#define USEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000000), ")\n"
     93		print "#define USEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000000), ")\n"
     94		obase=10
     95		print "#define USEC_TO_HZ_SHR32\t", s, "\n"
     96
     97		obase=10
     98		cd=gcd(hz,1000000)
     99		print "#define HZ_TO_USEC_NUM\t\t", 1000000/cd, "\n"
    100		print "#define HZ_TO_USEC_DEN\t\t", hz/cd, "\n"
    101		print "#define USEC_TO_HZ_NUM\t\t", hz/cd, "\n"
    102		print "#define USEC_TO_HZ_DEN\t\t", 1000000/cd, "\n"
    103
    104		cd=gcd(hz,1000000000)
    105		print "#define HZ_TO_NSEC_NUM\t\t", 1000000000/cd, "\n"
    106		print "#define HZ_TO_NSEC_DEN\t\t", hz/cd, "\n"
    107		print "#define NSEC_TO_HZ_NUM\t\t", hz/cd, "\n"
    108		print "#define NSEC_TO_HZ_DEN\t\t", 1000000000/cd, "\n"
    109		print "\n"
    110
    111		print "#endif /* KERNEL_TIMECONST_H */\n"
    112	}
    113	halt
    114}
    115
    116hz = read();
    117timeconst(hz)