Mercurial > projects > ldc
view tango/lib/compiler/llvmdc/arrays.d @ 305:2b72433d5c8c trunk
[svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
Fixed problems with label collisions when using labels inside inline asm. LabelStatement is now easily reached given its
Identifier, which should be useful elsewhere too.
Enabled inline asm for building the lib/compiler/llvmdc runtime code, fixing branches out of asm makes this possible.
author | lindquist |
---|---|
date | Fri, 27 Jun 2008 22:04:35 +0200 |
parents | 895e1b50cf2a |
children | 385a18242485 |
line wrap: on
line source
private import llvm.intrinsic; extern(C): int memcmp(void*,void*,size_t); size_t strlen(char*); version(LLVM64) alias llvm_memcpy_i64 llvm_memcpy; else alias llvm_memcpy_i32 llvm_memcpy; // per-element array init routines void _d_array_init_i1(bool* a, size_t n, bool v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_i8(ubyte* a, size_t n, ubyte v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_i16(ushort* a, size_t n, ushort v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_i32(uint* a, size_t n, uint v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_i64(ulong* a, size_t n, ulong v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_float(float* a, size_t n, float v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_double(double* a, size_t n, double v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_pointer(void** a, size_t n, void* v) { auto p = a; auto end = a+n; while (p !is end) *p++ = v; } void _d_array_init_mem(void* a, size_t na, void* v, size_t nv) { auto p = a; auto end = a + na*nv; while (p !is end) { llvm_memcpy(p,v,nv,0); p += nv; } } // for array cast size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz) { if (newelemsz == 1) { return len*elemsz; } else if (len % newelemsz) { throw new Exception("Bad array cast"); } return (len*elemsz)/newelemsz; }