diff options
Diffstat (limited to 'lldb/source/Expression/IRInterpreter.cpp')
-rw-r--r-- | lldb/source/Expression/IRInterpreter.cpp | 41 |
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(); |