diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-04-05 06:48:10 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-04-05 06:48:10 +0000 |
commit | 54d4d6353076800e0b640a380ce41e64f1041fbe (patch) | |
tree | ee8017b21860ce0fc9ee11520c16b3067e88496c /lib/Core/ExternalDispatcher.cpp | |
parent | cae0864b2437111b6cbbb7a3030e82bcef1a6024 (diff) | |
download | klee-54d4d6353076800e0b640a380ce41e64f1041fbe.tar.gz |
Add long double support, patch by David Ramos.
git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@100421 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Core/ExternalDispatcher.cpp')
-rw-r--r-- | lib/Core/ExternalDispatcher.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Core/ExternalDispatcher.cpp b/lib/Core/ExternalDispatcher.cpp index f746e6fa..665a0461 100644 --- a/lib/Core/ExternalDispatcher.cpp +++ b/lib/Core/ExternalDispatcher.cpp @@ -229,7 +229,7 @@ Function *ExternalDispatcher::createDispatcher(Function *target, Instruction *in cast<FunctionType>(cast<PointerType>(target->getType())->getElementType()); // Each argument will be passed by writing it into gTheArgsP[i]. - unsigned i = 0; + unsigned i = 0, idx = 2; for (CallSite::arg_iterator ai = cs.arg_begin(), ae = cs.arg_end(); ai!=ae; ++ai, ++i) { // Determine the type the argument will be passed as. This accomodates for @@ -240,12 +240,15 @@ Function *ExternalDispatcher::createDispatcher(Function *target, Instruction *in Instruction *argI64p = GetElementPtrInst::Create(argI64s, ConstantInt::get(Type::getInt32Ty(getGlobalContext()), - i+1), + idx), "", dBB); Instruction *argp = new BitCastInst(argI64p, PointerType::getUnqual(argTy), "", dBB); args[i] = new LoadInst(argp, "", dBB); + + unsigned argSize = argTy->getPrimitiveSizeInBits(); + idx += ((!!argSize ? argSize : 64) + 63)/64; } Constant *dispatchTarget = |