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