-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathc.h
More file actions
94 lines (78 loc) · 2.81 KB
/
Copy pathc.h
File metadata and controls
94 lines (78 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#pragma once
#ifndef COSMO
#include<string.h>
#include<stdio.h>
#endif
#ifndef QUIET
#define O printf
#else
#define O
#endif
#define ptr(x) (*(S*)&x)
#define xC ptr(x)
#define yC ptr(y)
#define zC ptr(z)
#define fC ptr(f)
#define rC ptr(r)
typedef unsigned long long K,UJ;typedef unsigned char C,*S;typedef int I,CP;typedef long long J;typedef double F;typedef void V;typedef unsigned int UI;
enum UCL{UQ,Ul,Ug,Uc,Um,Ua};//!< QQ Āɏ Ая Αω ∀⋿ ⌀⍺ (err, lat, cyr, gre, mth, apl)
#define UR(cp,s,l) (l>cp-s) //!< unicode range: codepoint, range start, range length+1
#define UC(x) (9082<x?0:UR(x,256,336)?Ul:UR(x,913,57)?Ug:UR(x,1040,64)?Uc:UR(x,8704,256)?Um:UR(x,8960,123)?Ua:UQ)
#define R return
#define P(b,a...) if(b)R({a;});
#define W(b...) while((b)) //while
#define N(n,a...) {I i=0,_n=(n);W(i<_n){a;++i;}}
#define $(b,a...) if(b){a;}else //cond
#define C(i,a...) case i:{a;}break; //case
#define S(i,c,a...) switch(i){c default:a;} //switch
#define MN(a,b) ({typeof(a)_a=(a);typeof(a)_b=(b);_a<_b?_a:_b;})
#define MX(a,b) ({typeof(a)_a=(a);typeof(a)_b=(b);_a>_b?_a:_b;})
#define ZI static I
#define ZC static C
#define ZS static S
#define ZJ static J
#define ZF static F
#define ZK static K
#define ZV static V
#define Z_ static inline
#ifdef SIGHANDLER
#include<signal.h>
#define AB(s) (w2((S)"AB: "),w2((S)s),raise(SIGABRT),(K)0L) //abort string
#else
#define AB(s) (w2((S)"AB: "),w2((S)s),nl(),exit(1),(K)0L) //abort string
#endif
#define ZV1(f) ZV f(K x)
#define S1(f) K f(S s)
#define ZS1(f) ZK f(S s)
#define ZK1(f) ZK f(K x)
#define ZK2(f) ZK f(K x,K y)
#define ZK3(f) ZK f(K x,K y,K z)
#define V1(f) V f(K x)
#define I1(f) I f(K x)
#define K1(f) K f(K x)
#define K2(f) K f(K x,K y)
#define K3(f) K f(K x,K y,K z)
//#ifndef __APPLE__
#if 0
#define BASE 0x700000
#else
#define BASE 0x70000000L
#endif
#if (__x86_64__||i386)&&!__TINYC__
Z_ I clzl(I n){R 60-__builtin_clzl(n);}Z_ V csr(){R;asm("movl $0x9fc0,-4(%rsp);ldmxcsr -4(%rsp);");}//V csr(){volatile I mxcsr=0x9fc0;asm("ldmxcsr %0":"=m"(mxcsr));}
#else
Z_ I clzl(I n){I i=0;W(n)n/=2,++i;R i-4;}Z_ V csr(){R;} //<! FIXME tcc ldmxcsr nyi //printf("CSR\n");UJ m;asm volatile("mrs %0, s3_4_c15_c2_7" : "=r"(m): :);asm volatile("msr s3_4_c15_c2_7, %0" : : "r"(m & 0xfffffffff0ffffff) :);
#endif
#if __i386
Z_ UJ ms(){UJ a;asm volatile("rdtsc":"=A"(a));R a;}
#elif __riscv
Z_ UJ ms(){UJ a;asm volatile("csrr %0," "cycle":"=r"(a));R a;}
#elif __aarch64__
Z_ UJ ms(){UJ a;asm volatile("mrs %0,cntvct_el0":"=r"(a));R a;}
#elif __x86_64
Z_ F ms(){UJ a,d;asm volatile("rdtsc":"=a"(a),"=d"(d));R(a|d<<32)*.58e-6;}
#elif __EMSCRIPTEN__
F emscripten_get_now();Z_ UJ ut(){R(U)emscripten_get_now();}
#endif
//Z_ F ms(){J a,d;asm volatile("rdtsc":"=a"(a),"=d"(d));R((d<<32)+a)*.58e-6;}//<! fixme .58e-6
//:~