Mercurial > projects > ldc
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; |