diff options
Diffstat (limited to 'lib/Core/ExternalDispatcher.cpp')
-rw-r--r-- | lib/Core/ExternalDispatcher.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Core/ExternalDispatcher.cpp b/lib/Core/ExternalDispatcher.cpp index e43a8a83..aadb340d 100644 --- a/lib/Core/ExternalDispatcher.cpp +++ b/lib/Core/ExternalDispatcher.cpp @@ -302,6 +302,11 @@ Function *ExternalDispatcherImpl::createDispatcher(Function *target, // functions. auto argTy = (i < FTy->getNumParams() ? FTy->getParamType(i) : (*ai)->getType()); + + // fp80 must be aligned to 16 according to the System V AMD 64 ABI + if (argTy->isX86_FP80Ty() && idx & 0x01) + idx++; + auto argI64p = Builder.CreateGEP(argI64s->getType()->getPointerElementType(), argI64s, ConstantInt::get(Type::getInt32Ty(ctx), idx)); |