From 0d9f3f7f953e61534d7ba9e94ae579ac854fdeae Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Fri, 8 Feb 2019 01:43:23 +0000 Subject: [WebAssembly] Fixed Disassembler ignoring endian swap on big endian. Summary: This fixes: https://bugs.llvm.org/show_bug.cgi?id=40620 Reviewers: aheejin Subscribers: dschuff, sbc100, jgravelle-google, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57933 llvm-svn: 353496 --- llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp') diff --git a/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp b/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp index 2a0ccfc..287b244 100644 --- a/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp +++ b/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp @@ -108,9 +108,8 @@ template bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef Bytes) { if (Size + sizeof(T) > Bytes.size()) return false; - T Val; - memcpy(&Val, Bytes.data() + Size, sizeof(T)); - support::endian::byte_swap(Val); + T Val = support::endian::read( + Bytes.data() + Size); Size += sizeof(T); if (std::is_floating_point::value) { MI.addOperand(MCOperand::createFPImm(static_cast(Val))); -- cgit v1.1