Mercurial > projects > ldc
comparison gen/arrays.c @ 48:4d171915a77b trunk
[svn r52] fixed static arrays in struct literals
author | lindquist |
---|---|
date | Fri, 19 Oct 2007 17:15:30 +0200 |
parents | eb7bf7b7972e |
children | 61bc1b4ad3c4 |
comparison
equal
deleted
inserted
replaced
47:6d60e6049c4e | 48:4d171915a77b |
---|---|
353 | 353 |
354 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); | 354 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); |
355 } | 355 } |
356 | 356 |
357 ////////////////////////////////////////////////////////////////////////////////////////// | 357 ////////////////////////////////////////////////////////////////////////////////////////// |
358 void LLVM_DtoStaticArrayCopy(llvm::Value* dst, llvm::Value* src) | |
359 { | |
360 assert(dst->getType() == src->getType()); | |
361 size_t arrsz = gTargetData->getTypeSize(dst->getType()->getContainedType(0)); | |
362 llvm::Value* n = llvm::ConstantInt::get(LLVM_DtoSize_t(), arrsz, false); | |
363 | |
364 llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty); | |
365 llvm::Value* dstarr = new llvm::BitCastInst(dst,arrty,"tmp",gIR->scopebb()); | |
366 llvm::Value* srcarr = new llvm::BitCastInst(src,arrty,"tmp",gIR->scopebb()); | |
367 | |
368 llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32(); | |
369 std::vector<llvm::Value*> llargs; | |
370 llargs.resize(4); | |
371 llargs[0] = dstarr; | |
372 llargs[1] = srcarr; | |
373 llargs[2] = n; | |
374 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); | |
375 | |
376 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); | |
377 } | |
378 | |
379 ////////////////////////////////////////////////////////////////////////////////////////// | |
358 llvm::Constant* LLVM_DtoConstantSlice(llvm::Constant* dim, llvm::Constant* ptr) | 380 llvm::Constant* LLVM_DtoConstantSlice(llvm::Constant* dim, llvm::Constant* ptr) |
359 { | 381 { |
360 std::vector<const llvm::Type*> types; | 382 std::vector<const llvm::Type*> types; |
361 types.push_back(dim->getType()); | 383 types.push_back(dim->getType()); |
362 types.push_back(ptr->getType()); | 384 types.push_back(ptr->getType()); |