comparison 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
comparison
equal deleted inserted replaced
107:3efbcc81ba45 108:288fe1029e1f
367 assert(0); 367 assert(0);
368 } 368 }
369 return ret; 369 return ret;
370 } 370 }
371 371
372 void DtoArrayCopy(DSliceValue* dst, DSliceValue* src) 372 void DtoArrayCopySlices(DSliceValue* dst, DSliceValue* src)
373 { 373 {
374 llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty); 374 llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty);
375 375
376 llvm::Value* sz1; 376 llvm::Value* sz1;
377 llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb()); 377 llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb());
378 378
379 llvm::Value* sz2; 379 llvm::Value* sz2;
380 llvm::Value* srcarr = new llvm::BitCastInst(get_slice_ptr(src,sz2),arrty,"tmp",gIR->scopebb()); 380 llvm::Value* srcarr = new llvm::BitCastInst(get_slice_ptr(src,sz2),arrty,"tmp",gIR->scopebb());
381
382 llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32();
383 std::vector<llvm::Value*> llargs;
384 llargs.resize(4);
385 llargs[0] = dstarr;
386 llargs[1] = srcarr;
387 llargs[2] = sz1;
388 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
389
390 new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
391 }
392
393 void DtoArrayCopyToSlice(DSliceValue* dst, DValue* src)
394 {
395 llvm::Type* arrty = llvm::PointerType::get(llvm::Type::Int8Ty);
396
397 llvm::Value* sz1;
398 llvm::Value* dstarr = new llvm::BitCastInst(get_slice_ptr(dst,sz1),arrty,"tmp",gIR->scopebb());
399 llvm::Value* srcarr = new llvm::BitCastInst(DtoArrayPtr(src),arrty,"tmp",gIR->scopebb());
381 400
382 llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32(); 401 llvm::Function* fn = (global.params.is64bit) ? LLVM_DeclareMemCpy64() : LLVM_DeclareMemCpy32();
383 std::vector<llvm::Value*> llargs; 402 std::vector<llvm::Value*> llargs;
384 llargs.resize(4); 403 llargs.resize(4);
385 llargs[0] = dstarr; 404 llargs[0] = dstarr;