diff options
author | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-02-08 01:43:23 +0000 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-02-08 01:43:23 +0000 |
commit | 0d9f3f7f953e61534d7ba9e94ae579ac854fdeae (patch) | |
tree | 2ff4bc07c660cadd981dc0099dee3cd7dbe539fa /llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp | |
parent | b347e752580961136913f7e076befd8e83d02cb7 (diff) | |
download | bcm5719-llvm-0d9f3f7f953e61534d7ba9e94ae579ac854fdeae.tar.gz bcm5719-llvm-0d9f3f7f953e61534d7ba9e94ae579ac854fdeae.zip |
[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
Diffstat (limited to 'llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp b/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp index 2a0ccfc4737..287b2443ddb 100644 --- a/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp +++ b/llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp @@ -108,9 +108,8 @@ template <typename T> bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef<uint8_t> Bytes) { if (Size + sizeof(T) > Bytes.size()) return false; - T Val; - memcpy(&Val, Bytes.data() + Size, sizeof(T)); - support::endian::byte_swap<T, support::endianness::little>(Val); + T Val = support::endian::read<T, support::endianness::little, alignof(T)>( + Bytes.data() + Size); Size += sizeof(T); if (std::is_floating_point<T>::value) { MI.addOperand(MCOperand::createFPImm(static_cast<double>(Val))); |