Mercurial > projects > ldc
annotate lphobos/llvm/intrinsic.d @ 11:d3ee9efe20e2 trunk
[svn r15] * Fixed a bunch problems with virtual calls. Seems I did some rather poor testing.
* Now 50/51 tests compile.
* Added a simple runalltests.d scripts that should be run with 'gdmd -run runalltests.d' - LLVMDC will not compile it yet.
author | lindquist |
---|---|
date | Tue, 02 Oct 2007 05:10:18 +0200 |
parents | c53b6e3fe49a |
children | 0ccfae271c45 |
rev | line source |
---|---|
1 | 1 module llvm.intrinsic; |
2 | |
3 // variable argument handling intrinsics | |
4 pragma(LLVM_internal, "intrinsic", "llvm.va_start") | |
5 void llvm_va_start(void* args); | |
6 | |
7 pragma(LLVM_internal, "intrinsic", "llvm.va_end") | |
8 void llvm_va_end(void* args); | |
9 | |
10 pragma(LLVM_internal, "intrinsic", "llvm.va_copy") | |
11 void llvm_va_copy(void* dst, void* src); | |
12 | |
13 // code generator intrinsics | |
14 /* | |
15 pragma(LLVM_internal, "intrinsic", "llvm.returnaddress") | |
16 void* llvm_returnaddress(uint level); | |
17 | |
18 pragma(LLVM_internal, "intrinsic", "llvm.frameaddress") | |
19 void* llvm_frameaddress(uint level); | |
20 | |
21 pragma(LLVM_internal, "intrinsic", "llvm.stacksave") | |
22 void* llvm_stacksave(); | |
23 | |
24 pragma(LLVM_internal, "intrinsic", "llvm.stackrestore") | |
25 void llvm_stackrestore(void* ptr); | |
26 | |
27 pragma(LLVM_internal, "intrinsic", "llvm.pcmarker") | |
28 void llvm_pcmarker(uint id); | |
29 | |
30 pragma(LLVM_internal, "intrinsic", "llvm.prefetch") | |
31 void llvm_prefetch(void* ptr, uint rw, uint locality); | |
11
d3ee9efe20e2
[svn r15] * Fixed a bunch problems with virtual calls. Seems I did some rather poor testing.
lindquist
parents:
1
diff
changeset
|
32 */ |
1 | 33 |
34 pragma(LLVM_internal, "intrinsic", "llvm.readcyclecounter") | |
11
d3ee9efe20e2
[svn r15] * Fixed a bunch problems with virtual calls. Seems I did some rather poor testing.
lindquist
parents:
1
diff
changeset
|
35 ulong readcyclecounter(); |
1 | 36 |
37 // standard C intrinsics | |
38 pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i32") | |
39 void llvm_memcpy_i32(void* dst, void* src, uint len, uint alignment); | |
40 | |
41 pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i64") | |
42 void llvm_memcpy_i64(void* dst, void* src, ulong len, uint alignment); | |
43 | |
44 pragma(LLVM_internal, "intrinsic", "llvm.memmove.i32") | |
45 void llvm_memmove_i32(void* dst, void* src, uint len, uint alignment); | |
46 | |
47 pragma(LLVM_internal, "intrinsic", "llvm.memmove.i64") | |
48 void llvm_memmove_i64(void* dst, void* src, ulong len, int alignment); | |
49 | |
50 pragma(LLVM_internal, "intrinsic", "llvm.memset.i32") | |
51 void llvm_memset_i32(void* dst, ubyte val, uint len, uint alignment); | |
52 | |
53 pragma(LLVM_internal, "intrinsic", "llvm.memset.i64") | |
54 void llvm_memset_i64(void* dst, ubyte val, ulong len, uint alignment); | |
55 | |
56 pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f32") | |
57 float llvm_sqrt(float val); | |
58 | |
59 pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64") | |
60 { | |
61 double llvm_sqrt(double val); | |
62 real llvm_sqrt(real val); | |
63 } | |
64 | |
65 pragma(LLVM_internal, "intrinsic", "llvm.powi.f32") | |
66 float llvm_powi(float val, int power); | |
67 | |
68 pragma(LLVM_internal, "intrinsic", "llvm.powi.f64") | |
69 { | |
70 double llvm_powi(double val, int power); | |
71 real llvm_powi(real val, int power); | |
72 } | |
73 | |
74 // bit manipulation intrinsics | |
75 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i16.i16") | |
76 ushort llvm_bswap(ushort val); | |
77 | |
78 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32.i32") | |
79 uint llvm_bswap(uint val); | |
80 | |
81 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i64.i64") | |
82 ulong llvm_bswap(ulong val); | |
83 | |
84 /* | |
85 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i8") | |
86 uint llvm_ctpop_i8(ubyte src); | |
87 | |
88 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i16") | |
89 uint llvm_ctpop_i16(ushort src); | |
90 | |
91 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i32") | |
92 uint llvm_ctpop_i32(uint src); | |
93 | |
94 pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i64") | |
95 uint llvm_ctpop_i64(ulong src); | |
96 | |
97 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i8") | |
98 uint llvm_ctlz_i8(ubyte src); | |
99 | |
100 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i16") | |
101 uint llvm_ctlz_i16(ushort src); | |
102 | |
103 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i32") | |
104 uint llvm_ctlz_i32(uint src); | |
105 | |
106 pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i64") | |
107 uint llvm_ctlz_i64(ulong src); | |
108 | |
109 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i8") | |
110 uint llvm_cttz_i8(ubyte src); | |
111 | |
112 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i16") | |
113 uint llvm_cttz_i16(ushort src); | |
114 | |
115 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i32") | |
116 uint llvm_cttz_i32(uint src); | |
117 | |
118 pragma(LLVM_internal, "intrinsic", "llvm.cttz.i64") | |
119 uint llvm_cttz_i64(ulong src); | |
120 */ | |
121 | |
122 // atomic operations and synchronization intrinsics | |
123 // TODO | |
124 /* | |
125 | |
126 //declare i8 @llvm.atomic.lcs.i8.i8p.i8.i8( i8* <ptr>, i8 <cmp>, i8 <val> ) | |
127 pragma(LLVM_internal, "intrinsic", "llvm.atomic.lcs.i8.i8p.i8.i8") | |
128 ubyte llvm_atomic_lcs_i8(void* ptr, ubyte cmp, ubyte val); | |
129 | |
130 declare i16 @llvm.atomic.lcs.i16.i16p.i16.i16( i16* <ptr>, i16 <cmp>, i16 <val> ) | |
131 declare i32 @llvm.atomic.lcs.i32.i32p.i32.i32( i32* <ptr>, i32 <cmp>, i32 <val> ) | |
132 declare i64 @llvm.atomic.lcs.i64.i64p.i64.i64( i64* <ptr>, i64 <cmp>, i64 <val> ) | |
133 | |
134 declare i8 @llvm.atomic.ls.i8.i8p.i8( i8* <ptr>, i8 <val> ) | |
135 declare i16 @llvm.atomic.ls.i16.i16p.i16( i16* <ptr>, i16 <val> ) | |
136 declare i32 @llvm.atomic.ls.i32.i32p.i32( i32* <ptr>, i32 <val> ) | |
137 declare i64 @llvm.atomic.ls.i64.i64p.i64( i64* <ptr>, i64 <val> ) | |
138 | |
139 declare i8 @llvm.atomic.las.i8.i8p.i8( i8* <ptr>, i8 <delta> ) | |
140 declare i16 @llvm.atomic.las.i16.i16p.i16( i16* <ptr>, i16 <delta> ) | |
141 declare i32 @llvm.atomic.las.i32.i32p.i32( i32* <ptr>, i32 <delta> ) | |
142 declare i64 @llvm.atomic.las.i64.i64p.i64( i64* <ptr>, i64 <delta> ) | |
143 | |
144 declare i8 @llvm.atomic.lss.i8.i8.i8( i8* <ptr>, i8 <delta> ) | |
145 declare i16 @llvm.atomic.lss.i16.i16.i16( i16* <ptr>, i16 <delta> ) | |
146 declare i32 @llvm.atomic.lss.i32.i32.i32( i32* <ptr>, i32 <delta> ) | |
147 declare i64 @llvm.atomic.lss.i64.i64.i64( i64* <ptr>, i64 <delta> ) | |
148 | |
149 declare void @llvm.memory.barrier( i1 <ll>, i1 <ls>, i1 <sl>, i1 <ss> ) | |
150 */ |