aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ExecutionEngine/ExecutionEngine.cpp
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2009-03-24 18:16:17 +0000
committerDale Johannesen <dalej@apple.com>2009-03-24 18:16:17 +0000
commit1f8c564d7df985082d7e728330979781f384d0e9 (patch)
tree630a43b408d42480b85407582e7c5a9282a4f985 /lib/ExecutionEngine/ExecutionEngine.cpp
parent4f9797d683156bc5b59f5be66d0c01a369935ba1 (diff)
downloadexternal_llvm-1f8c564d7df985082d7e728330979781f384d0e9.zip
external_llvm-1f8c564d7df985082d7e728330979781f384d0e9.tar.gz
external_llvm-1f8c564d7df985082d7e728330979781f384d0e9.tar.bz2
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.cpp26
1 files changed, 5 insertions, 21 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index 4e182d4..e74fc32 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;
}