Mercurial > projects > ldc
diff gen/arrays.cpp @ 108:288fe1029e1f trunk
[svn r112] Fixed 'case 1,2,3:' style case statements.
Fixed a bunch of bugs with return/break/continue in loops.
Fixed support for the DMDFE hidden implicit return value variable. This can be needed for some foreach statements where the loop body is converted to a nested delegate, but also possibly returns from the function.
Added std.math to phobos.
Added AA runtime support code, done ground work for implementing AAs.
Several other bugfixes.
author | lindquist |
---|---|
date | Tue, 20 Nov 2007 05:29:20 +0100 |
parents | 027b8d8b71ec |
children | 5ab8e92611f9 |
line wrap: on
line diff
--- a/gen/arrays.cpp Tue Nov 20 00:02:35 2007 +0100 +++ b/gen/arrays.cpp Tue Nov 20 05:29:20 2007 +0100 @@ -369,7 +369,7 @@ return ret; } -void DtoArrayCopy(DSliceValue* dst, DSliceValue* src) +void DtoArrayCopySlices(DSliceValue* dst, DSliceValue* src) { llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty); @@ -390,6 +390,25 @@ new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); } +void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src) +{ + llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty); + + llvm::Value* sz1; + llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb()); + llvm::Value* srcarr = new llvm::BitCastInst(DtoArrayPtr(src),arrty,"tmp",gIR->scopebb()); + + llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32(); + std::vector<llvm::Value*> llargs; + llargs.resize(4); + llargs[0] = dstarr; + llargs[1] = srcarr; + llargs[2] = sz1; + llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); + + new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); +} + ////////////////////////////////////////////////////////////////////////////////////////// void DtoStaticArrayCopy(llvm::Value* dst, llvm::Value* src) {