summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/IRInterpreter.cpp
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2016-04-14 17:22:18 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2016-04-14 17:22:18 +0000
commitda70c17bfce29c136bad88600afaa36aa0b91259 (patch)
treea81d84091d542cdb374ac44b036e74257e2248af /lldb/source/Expression/IRInterpreter.cpp
parent5cfd306e00ddd88bbd5e50a305b7437e3ba92584 (diff)
downloadbcm5719-llvm-da70c17bfce29c136bad88600afaa36aa0b91259.tar.gz
bcm5719-llvm-da70c17bfce29c136bad88600afaa36aa0b91259.zip
Revert r266311 - Fix usage of APInt.getRawData for big-endian systems
Try to get 32-bit build bots running again. llvm-svn: 266341
Diffstat (limited to 'lldb/source/Expression/IRInterpreter.cpp')
-rw-r--r--lldb/source/Expression/IRInterpreter.cpp41
1 files changed, 15 insertions, 26 deletions
diff --git a/lldb/source/Expression/IRInterpreter.cpp b/lldb/source/Expression/IRInterpreter.cpp
index 2871a066013..a0d7a163a92 100644
--- a/lldb/source/Expression/IRInterpreter.cpp
+++ b/lldb/source/Expression/IRInterpreter.cpp
@@ -231,7 +231,7 @@ public:
lldb_private::Scalar cast_scalar;
- if (!AssignToMatchType(cast_scalar, scalar.ULongLong(), value->getType()))
+ if (!AssignToMatchType(cast_scalar, scalar.GetRawBits64(0), value->getType()))
return false;
size_t value_byte_size = m_target_data.getTypeStoreSize(value->getType());
@@ -373,18 +373,19 @@ public:
if (!ResolveConstantValue(resolved_value, constant))
return false;
+ lldb_private::StreamString buffer (lldb_private::Stream::eBinary,
+ m_execution_unit.GetAddressByteSize(),
+ m_execution_unit.GetByteOrder());
+
size_t constant_size = m_target_data.getTypeStoreSize(constant->getType());
- lldb_private::DataBufferHeap buf(constant_size, 0);
- lldb_private::Error get_data_error;
+ const uint64_t *raw_data = resolved_value.getRawData();
- lldb_private::Scalar resolved_scalar(resolved_value.zextOrTrunc(llvm::NextPowerOf2(constant_size) * 8));
- if (!resolved_scalar.GetAsMemoryData(buf.GetBytes(), buf.GetByteSize(), m_byte_order, get_data_error))
- return false;
+ buffer.PutRawBytes(raw_data, constant_size, lldb_private::endian::InlHostByteOrder());
lldb_private::Error write_error;
- m_execution_unit.WriteMemory(process_address, buf.GetBytes(), buf.GetByteSize(), write_error);
+ m_execution_unit.WriteMemory(process_address, (const uint8_t*)buffer.GetData(), constant_size, write_error);
return write_error.Success();
}
@@ -818,9 +819,7 @@ IRInterpreter::Interpret (llvm::Module &module,
result = L / R;
break;
case Instruction::UDiv:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = L / R;
+ result = L.GetRawBits64(0) / R.GetRawBits64(1);
break;
case Instruction::SRem:
L.MakeSigned();
@@ -828,9 +827,7 @@ IRInterpreter::Interpret (llvm::Module &module,
result = L % R;
break;
case Instruction::URem:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = L % R;
+ result = L.GetRawBits64(0) % R.GetRawBits64(1);
break;
case Instruction::Shl:
result = L << R;
@@ -1033,7 +1030,7 @@ IRInterpreter::Interpret (llvm::Module &module,
return false;
}
- if (!C.IsZero())
+ if (C.GetRawBits64(0))
frame.Jump(br_inst->getSuccessor(0));
else
frame.Jump(br_inst->getSuccessor(1));
@@ -1184,24 +1181,16 @@ IRInterpreter::Interpret (llvm::Module &module,
result = (L != R);
break;
case CmpInst::ICMP_UGT:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = (L > R);
+ result = (L.GetRawBits64(0) > R.GetRawBits64(0));
break;
case CmpInst::ICMP_UGE:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = (L >= R);
+ result = (L.GetRawBits64(0) >= R.GetRawBits64(0));
break;
case CmpInst::ICMP_ULT:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = (L < R);
+ result = (L.GetRawBits64(0) < R.GetRawBits64(0));
break;
case CmpInst::ICMP_ULE:
- L.MakeUnsigned();
- R.MakeUnsigned();
- result = (L <= R);
+ result = (L.GetRawBits64(0) <= R.GetRawBits64(0));
break;
case CmpInst::ICMP_SGT:
L.MakeSigned();
OpenPOWER on IntegriCloud