Mercurial > projects > ldc
view gen/arrays.h @ 920:545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Fixed align N; in asm blocks.
Fixed inreg parameter passing on x86 for ref/out params.
Removed support for lazy initialization of function local static variables, I have no idea why I ever implemented this, it's not in the D spec, and DMD doesn't support it :P
Some of the global variable related changes might cause minor regressions, but they should be easily fixable.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 03 Feb 2009 08:54:57 +0100 |
parents | 340acf1535d0 |
children | 79758fd2f48a |
line wrap: on
line source
#ifndef LLVMC_GEN_ARRAYS_H #define LLVMC_GEN_ARRAYS_H struct DSliceValue; const llvm::StructType* DtoArrayType(Type* arrayTy); const llvm::StructType* DtoArrayType(const LLType* elemTy); const llvm::ArrayType* DtoStaticArrayType(Type* sarrayTy); LLConstant* DtoConstArrayInitializer(ArrayInitializer* si); LLConstant* DtoConstSlice(LLConstant* dim, LLConstant* ptr); void DtoArrayCopySlices(DSliceValue* dst, DSliceValue* src); void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src); void DtoArrayInit(Loc& loc, DValue* array, DValue* value); void DtoArrayAssign(LLValue* l, LLValue* r); void DtoSetArray(LLValue* arr, LLValue* dim, LLValue* ptr); void DtoSetArrayToNull(LLValue* v); DSliceValue* DtoNewDynArray(Loc& loc, Type* arrayType, DValue* dim, bool defaultInit=true); DSliceValue* DtoNewMulDimDynArray(Loc& loc, Type* arrayType, DValue** dims, size_t ndims, bool defaultInit=true); DSliceValue* DtoResizeDynArray(Type* arrayType, DValue* array, DValue* newdim); DSliceValue* DtoCatAssignElement(DValue* arr, Expression* exp); DSliceValue* DtoCatAssignArray(DValue* arr, Expression* exp); DSliceValue* DtoCatArrays(Type* type, Expression* e1, Expression* e2); DSliceValue* DtoCatArrayElement(Type* type, Expression* exp1, Expression* exp2); void DtoStaticArrayCopy(LLValue* dst, LLValue* src); LLValue* DtoArrayEquals(Loc& loc, TOK op, DValue* l, DValue* r); LLValue* DtoArrayCompare(Loc& loc, TOK op, DValue* l, DValue* r); LLValue* DtoDynArrayIs(TOK op, DValue* l, DValue* r); LLValue* DtoArrayCastLength(LLValue* len, const LLType* elemty, const LLType* newelemty); LLValue* DtoArrayLen(DValue* v); LLValue* DtoArrayPtr(DValue* v); DValue* DtoCastArray(Loc& loc, DValue* val, Type* to); // generates an array bounds check void DtoArrayBoundsCheck(Loc& loc, DValue* arr, DValue* index, bool isslice); #endif // LLVMC_GEN_ARRAYS_H