Mercurial > projects > ldc
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 */ |