132
|
1 // code generator intrinsics
|
|
2 /*
|
|
3 pragma(LLVM_internal, "intrinsic", "llvm.returnaddress")
|
|
4 void* llvm_returnaddress(uint level);
|
|
5 */
|
|
6 pragma(LLVM_internal, "intrinsic", "llvm.frameaddress")
|
|
7 void* llvm_frameaddress(uint level);
|
|
8 /*
|
|
9 pragma(LLVM_internal, "intrinsic", "llvm.stacksave")
|
|
10 void* llvm_stacksave();
|
|
11
|
|
12 pragma(LLVM_internal, "intrinsic", "llvm.stackrestore")
|
|
13 void llvm_stackrestore(void* ptr);
|
|
14
|
|
15 pragma(LLVM_internal, "intrinsic", "llvm.pcmarker")
|
|
16 void llvm_pcmarker(uint id);
|
|
17
|
|
18 pragma(LLVM_internal, "intrinsic", "llvm.prefetch")
|
|
19 void llvm_prefetch(void* ptr, uint rw, uint locality);
|
|
20 */
|
|
21
|
|
22 pragma(LLVM_internal, "intrinsic", "llvm.readcyclecounter")
|
|
23 ulong readcyclecounter();
|
|
24
|
|
25 // standard C intrinsics
|
|
26 pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i32")
|
|
27 void llvm_memcpy_i32(void* dst, void* src, uint len, uint alignment);
|
|
28
|
|
29 pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i64")
|
|
30 void llvm_memcpy_i64(void* dst, void* src, ulong len, uint alignment);
|
|
31
|
|
32 pragma(LLVM_internal, "intrinsic", "llvm.memmove.i32")
|
|
33 void llvm_memmove_i32(void* dst, void* src, uint len, uint alignment);
|
|
34
|
|
35 pragma(LLVM_internal, "intrinsic", "llvm.memmove.i64")
|
|
36 void llvm_memmove_i64(void* dst, void* src, ulong len, int alignment);
|
|
37
|
|
38 pragma(LLVM_internal, "intrinsic", "llvm.memset.i32")
|
|
39 void llvm_memset_i32(void* dst, ubyte val, uint len, uint alignment);
|
|
40
|
|
41 pragma(LLVM_internal, "intrinsic", "llvm.memset.i64")
|
|
42 void llvm_memset_i64(void* dst, ubyte val, ulong len, uint alignment);
|
|
43
|
|
44 pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f32")
|
|
45 float llvm_sqrt(float val);
|
|
46
|
|
47 pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64")
|
|
48 {
|
|
49 double llvm_sqrt(double val);
|
|
50 real llvm_sqrt(real val);
|
|
51 }
|
|
52
|
|
53 pragma(LLVM_internal, "intrinsic", "llvm.powi.f32")
|
|
54 float llvm_powi(float val, int power);
|
|
55
|
|
56 pragma(LLVM_internal, "intrinsic", "llvm.powi.f64")
|
|
57 {
|
|
58 double llvm_powi(double val, int power);
|
|
59 real llvm_powi(real val, int power);
|
|
60 }
|
|
61
|
|
62 // bit manipulation intrinsics
|
|
63 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i16.i16")
|
|
64 ushort llvm_bswap(ushort val);
|
|
65
|
|
66 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32.i32")
|
|
67 uint llvm_bswap(uint val);
|
|
68
|
|
69 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i64.i64")
|
|
70 ulong llvm_bswap(ulong val);
|
|
71
|
|
72 /*
|
|
73 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i8")
|
|
74 uint llvm_ctpop_i8(ubyte src);
|
|
75
|
|
76 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i16")
|
|
77 uint llvm_ctpop_i16(ushort src);
|
|
78
|
|
79 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i32")
|
|
80 uint llvm_ctpop_i32(uint src);
|
|
81
|
|
82 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i64")
|
|
83 uint llvm_ctpop_i64(ulong src);
|
|
84
|
|
85 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i8")
|
|
86 uint llvm_ctlz_i8(ubyte src);
|
|
87
|
|
88 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i16")
|
|
89 uint llvm_ctlz_i16(ushort src);
|
|
90
|
|
91 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i32")
|
|
92 uint llvm_ctlz_i32(uint src);
|
|
93
|
|
94 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i64")
|
|
95 uint llvm_ctlz_i64(ulong src);
|
|
96
|
|
97 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i8")
|
|
98 uint llvm_cttz_i8(ubyte src);
|
|
99
|
|
100 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i16")
|
|
101 uint llvm_cttz_i16(ushort src);
|
|
102
|
|
103 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i32")
|
|
104 uint llvm_cttz_i32(uint src);
|
|
105
|
|
106 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i64")
|
|
107 uint llvm_cttz_i64(ulong src);
|
|
108 */
|
|
109
|
|
110 // atomic operations and synchronization intrinsics
|
|
111 // TODO
|
|
112 /*
|
|
113
|
|
114 //declare i8 @llvm.atomic.lcs.i8.i8p.i8.i8( i8* <ptr>, i8 <cmp>, i8 <val> )
|
|
115 pragma(LLVM_internal, "intrinsic", "llvm.atomic.lcs.i8.i8p.i8.i8")
|
|
116 ubyte llvm_atomic_lcs_i8(void* ptr, ubyte cmp, ubyte val);
|
|
117
|
|
118 declare i16 @llvm.atomic.lcs.i16.i16p.i16.i16( i16* <ptr>, i16 <cmp>, i16 <val> )
|
|
119 declare i32 @llvm.atomic.lcs.i32.i32p.i32.i32( i32* <ptr>, i32 <cmp>, i32 <val> )
|
|
120 declare i64 @llvm.atomic.lcs.i64.i64p.i64.i64( i64* <ptr>, i64 <cmp>, i64 <val> )
|
|
121
|
|
122 declare i8 @llvm.atomic.ls.i8.i8p.i8( i8* <ptr>, i8 <val> )
|
|
123 declare i16 @llvm.atomic.ls.i16.i16p.i16( i16* <ptr>, i16 <val> )
|
|
124 declare i32 @llvm.atomic.ls.i32.i32p.i32( i32* <ptr>, i32 <val> )
|
|
125 declare i64 @llvm.atomic.ls.i64.i64p.i64( i64* <ptr>, i64 <val> )
|
|
126
|
|
127 declare i8 @llvm.atomic.las.i8.i8p.i8( i8* <ptr>, i8 <delta> )
|
|
128 declare i16 @llvm.atomic.las.i16.i16p.i16( i16* <ptr>, i16 <delta> )
|
|
129 declare i32 @llvm.atomic.las.i32.i32p.i32( i32* <ptr>, i32 <delta> )
|
|
130 declare i64 @llvm.atomic.las.i64.i64p.i64( i64* <ptr>, i64 <delta> )
|
|
131
|
|
132 declare i8 @llvm.atomic.lss.i8.i8.i8( i8* <ptr>, i8 <delta> )
|
|
133 declare i16 @llvm.atomic.lss.i16.i16.i16( i16* <ptr>, i16 <delta> )
|
|
134 declare i32 @llvm.atomic.lss.i32.i32.i32( i32* <ptr>, i32 <delta> )
|
|
135 declare i64 @llvm.atomic.lss.i64.i64.i64( i64* <ptr>, i64 <delta> )
|
|
136
|
|
137 declare void @llvm.memory.barrier( i1 <ll>, i1 <ls>, i1 <sl>, i1 <ss> )
|
|
138 */
|