diff options
author | Dale Johannesen <dalej@apple.com> | 2009-03-24 18:16:17 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2009-03-24 18:16:17 +0000 |
commit | 1f8c564d7df985082d7e728330979781f384d0e9 (patch) | |
tree | 630a43b408d42480b85407582e7c5a9282a4f985 /lib/ExecutionEngine/ExecutionEngine.cpp | |
parent | 4f9797d683156bc5b59f5be66d0c01a369935ba1 (diff) |
fix one more fp80 case (used only by Interpreter)
and streamline code here a bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67636 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/ExecutionEngine.cpp')
-rw-r--r-- | lib/ExecutionEngine/ExecutionEngine.cpp | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 4e182d4983..e74fc329ae 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -748,17 +748,9 @@ void ExecutionEngine::StoreValueToMemory(const GenericValue &Val, case Type::DoubleTyID: *((double*)Ptr) = Val.DoubleVal; break; - case Type::X86_FP80TyID: { - uint16_t *Dest = (uint16_t*)Ptr; - const uint16_t *Src = (uint16_t*)Val.IntVal.getRawData(); - // This is endian dependent, but it will only work on x86 anyway. - Dest[0] = Src[0]; - Dest[1] = Src[1]; - Dest[2] = Src[2]; - Dest[3] = Src[3]; - Dest[4] = Src[4]; - break; - } + case Type::X86_FP80TyID: + memcpy(Ptr, Val.IntVal.getRawData(), 10); + break; case Type::PointerTyID: // Ensure 64 bit target pointers are fully initialized on 32 bit hosts. if (StoreBytes != sizeof(PointerTy)) @@ -835,16 +827,8 @@ void ExecutionEngine::LoadValueFromMemory(GenericValue &Result, case Type::X86_FP80TyID: { // This is endian dependent, but it will only work on x86 anyway. // FIXME: Will not trap if loading a signaling NaN. - uint16_t *p = (uint16_t*)Ptr; - union { - uint16_t x[8]; - uint64_t y[2]; - }; - x[0] = p[1]; - x[1] = p[2]; - x[2] = p[3]; - x[3] = p[4]; - x[4] = p[0]; + uint64_t y[2]; + memcpy(y, Ptr, 10); Result.IntVal = APInt(80, 2, y); break; } |