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());