comparison tango/lib/compiler/llvmdc/llvm/intrinsic.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
comparison
equal deleted inserted replaced
131:5825d48b27d1 132:1700239cab2e
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 */