Mercurial > projects > ldc
annotate lphobos/llvm/intrinsic.d @ 715:30b42a283c8e
Removed TypeOpaque from DMD.
Changed runtime functions taking opaque[] to void[].
Implemented proper type painting, to avoid "resizing" array casts in runtime calls that previously took opaque[].
Implemented dynamic arrays as first class types, this implements proper ABI for these types on x86.
Added dwarf region end after call to assert function, fixes some problems with llvm not allowing this to be missing.
Reverted change to WithStatement from rev [704] it breaks MiniD, mini/with2.d needs to be fixed some other way...
Fixed tango bug 1339 in runtime, problem with _adReverseChar on invalid UTF-8.
Disabled .bc generation in the compiler runtime part, genobj.d triggers some llvm bug when using debug info. the .o seems to work fine.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:55:33 +0200 |
parents | 373489eeaf90 |
children |
rev | line source |
---|---|
1 | 1 module llvm.intrinsic; |
2 | |
3 // code generator intrinsics | |
4 /* | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
5 pragma(intrinsic, "llvm.returnaddress") |
1 | 6 void* llvm_returnaddress(uint level); |
131 | 7 */ |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
8 pragma(intrinsic, "llvm.frameaddress") |
1 | 9 void* llvm_frameaddress(uint level); |
131 | 10 /* |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
11 pragma(intrinsic, "llvm.stacksave") |
1 | 12 void* llvm_stacksave(); |
13 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
14 pragma(intrinsic, "llvm.stackrestore") |
1 | 15 void llvm_stackrestore(void* ptr); |
16 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
17 pragma(intrinsic, "llvm.pcmarker") |
1 | 18 void llvm_pcmarker(uint id); |
19 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
20 pragma(intrinsic, "llvm.prefetch") |
1 | 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 |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
24 pragma(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 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
28 pragma(intrinsic, "llvm.memcpy.i32") |
1 | 29 void llvm_memcpy_i32(void* dst, void* src, uint len, uint alignment); |
30 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
31 pragma(intrinsic, "llvm.memcpy.i64") |
1 | 32 void llvm_memcpy_i64(void* dst, void* src, ulong len, uint alignment); |
33 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
34 pragma(intrinsic, "llvm.memmove.i32") |
1 | 35 void llvm_memmove_i32(void* dst, void* src, uint len, uint alignment); |
36 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
37 pragma(intrinsic, "llvm.memmove.i64") |
1 | 38 void llvm_memmove_i64(void* dst, void* src, ulong len, int alignment); |
39 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
40 pragma(intrinsic, "llvm.memset.i32") |
1 | 41 void llvm_memset_i32(void* dst, ubyte val, uint len, uint alignment); |
42 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
43 pragma(intrinsic, "llvm.memset.i64") |
1 | 44 void llvm_memset_i64(void* dst, ubyte val, ulong len, uint alignment); |
45 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
46 pragma(intrinsic, "llvm.sqrt.f32") |
1 | 47 float llvm_sqrt(float val); |
48 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
49 pragma(intrinsic, "llvm.sqrt.f64") |
1 | 50 { |
51 double llvm_sqrt(double val); | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
52 // real llvm_sqrt(real val); |
1 | 53 } |
54 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
55 pragma(intrinsic, "llvm.powi.f32") |
1 | 56 float llvm_powi(float val, int power); |
57 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
58 pragma(intrinsic, "llvm.powi.f64") |
1 | 59 { |
60 double llvm_powi(double val, int power); | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
61 // real llvm_powi(real val, int power); |
1 | 62 } |
63 | |
64 // bit manipulation intrinsics | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
65 pragma(intrinsic, "llvm.bswap.i16.i16") |
1 | 66 ushort llvm_bswap(ushort val); |
67 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
68 pragma(intrinsic, "llvm.bswap.i32.i32") |
1 | 69 uint llvm_bswap(uint val); |
70 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
71 pragma(intrinsic, "llvm.bswap.i64.i64") |
1 | 72 ulong llvm_bswap(ulong val); |
73 | |
74 /* | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
75 pragma(intrinsic, "llvm.ctpop.i8") |
1 | 76 uint llvm_ctpop_i8(ubyte src); |
77 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
78 pragma(intrinsic, "llvm.ctpop.i16") |
1 | 79 uint llvm_ctpop_i16(ushort src); |
80 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
81 pragma(intrinsic, "llvm.ctpop.i32") |
1 | 82 uint llvm_ctpop_i32(uint src); |
83 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
84 pragma(intrinsic, "llvm.ctpop.i64") |
1 | 85 uint llvm_ctpop_i64(ulong src); |
86 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
87 pragma(intrinsic, "llvm.ctlz.i8") |
1 | 88 uint llvm_ctlz_i8(ubyte src); |
89 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
90 pragma(intrinsic, "llvm.ctlz.i16") |
1 | 91 uint llvm_ctlz_i16(ushort src); |
92 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
93 pragma(intrinsic, "llvm.ctlz.i32") |
1 | 94 uint llvm_ctlz_i32(uint src); |
95 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
96 pragma(intrinsic, "llvm.ctlz.i64") |
1 | 97 uint llvm_ctlz_i64(ulong src); |
98 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
99 pragma(intrinsic, "llvm.cttz.i8") |
1 | 100 uint llvm_cttz_i8(ubyte src); |
101 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
102 pragma(intrinsic, "llvm.cttz.i16") |
1 | 103 uint llvm_cttz_i16(ushort src); |
104 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
105 pragma(intrinsic, "llvm.cttz.i32") |
1 | 106 uint llvm_cttz_i32(uint src); |
107 | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
108 pragma(intrinsic, "llvm.cttz.i64") |
1 | 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> ) | |
473
373489eeaf90
Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
117 pragma(intrinsic, "llvm.atomic.lcs.i8.i8p.i8.i8") |
1 | 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 */ |