mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
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
This commit is contained in:
parent
4f9797d683
commit
1f8c564d7d
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user