Mercurial > projects > ldc
comparison runtime/internal/arrayInit.d @ 443:44f08170f4ef
Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn.
Reworked the LLVMDC specific pragmas.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Fri, 01 Aug 2008 00:32:06 +0200 |
parents | |
children | 192b82878b78 |
comparison
equal
deleted
inserted
replaced
442:76078c8ab5b9 | 443:44f08170f4ef |
---|---|
1 private import llvmdc.intrinsics; | |
2 | |
3 extern(C): | |
4 | |
5 int memcmp(void*,void*,size_t); | |
6 size_t strlen(char*); | |
7 | |
8 version(LLVM64) | |
9 alias llvm_memcpy_i64 llvm_memcpy; | |
10 else | |
11 alias llvm_memcpy_i32 llvm_memcpy; | |
12 | |
13 // per-element array init routines | |
14 | |
15 void _d_array_init_i1(bool* a, size_t n, bool v) | |
16 { | |
17 auto p = a; | |
18 auto end = a+n; | |
19 while (p !is end) | |
20 *p++ = v; | |
21 } | |
22 | |
23 void _d_array_init_i8(ubyte* a, size_t n, ubyte v) | |
24 { | |
25 auto p = a; | |
26 auto end = a+n; | |
27 while (p !is end) | |
28 *p++ = v; | |
29 } | |
30 | |
31 void _d_array_init_i16(ushort* a, size_t n, ushort v) | |
32 { | |
33 auto p = a; | |
34 auto end = a+n; | |
35 while (p !is end) | |
36 *p++ = v; | |
37 } | |
38 | |
39 void _d_array_init_i32(uint* a, size_t n, uint v) | |
40 { | |
41 auto p = a; | |
42 auto end = a+n; | |
43 while (p !is end) | |
44 *p++ = v; | |
45 } | |
46 | |
47 void _d_array_init_i64(ulong* a, size_t n, ulong v) | |
48 { | |
49 auto p = a; | |
50 auto end = a+n; | |
51 while (p !is end) | |
52 *p++ = v; | |
53 } | |
54 | |
55 void _d_array_init_float(float* a, size_t n, float v) | |
56 { | |
57 auto p = a; | |
58 auto end = a+n; | |
59 while (p !is end) | |
60 *p++ = v; | |
61 } | |
62 | |
63 void _d_array_init_double(double* a, size_t n, double v) | |
64 { | |
65 auto p = a; | |
66 auto end = a+n; | |
67 while (p !is end) | |
68 *p++ = v; | |
69 } | |
70 | |
71 void _d_array_init_real(real* a, size_t n, real v) | |
72 { | |
73 auto p = a; | |
74 auto end = a+n; | |
75 while (p !is end) | |
76 *p++ = v; | |
77 } | |
78 | |
79 void _d_array_init_pointer(void** a, size_t n, void* v) | |
80 { | |
81 auto p = a; | |
82 auto end = a+n; | |
83 while (p !is end) | |
84 *p++ = v; | |
85 } | |
86 | |
87 void _d_array_init_mem(void* a, size_t na, void* v, size_t nv) | |
88 { | |
89 auto p = a; | |
90 auto end = a + na*nv; | |
91 while (p !is end) { | |
92 llvm_memcpy(p,v,nv,0); | |
93 p += nv; | |
94 } | |
95 } | |
96 | |
97 // for array cast | |
98 size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz) | |
99 { | |
100 if (newelemsz == 1) { | |
101 return len*elemsz; | |
102 } | |
103 else if (len % newelemsz) { | |
104 throw new Exception("Bad array cast"); | |
105 } | |
106 return (len*elemsz)/newelemsz; | |
107 } |