1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

[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
This commit is contained in:
Wouter van Oortmerssen 2019-02-08 01:43:23 +00:00
parent ca954e59d7
commit 922e60889a
2 changed files with 3 additions and 6 deletions

View File

@ -108,9 +108,8 @@ template <typename T>
bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef<uint8_t> Bytes) { bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef<uint8_t> Bytes) {
if (Size + sizeof(T) > Bytes.size()) if (Size + sizeof(T) > Bytes.size())
return false; return false;
T Val; T Val = support::endian::read<T, support::endianness::little, alignof(T)>(
memcpy(&Val, Bytes.data() + Size, sizeof(T)); Bytes.data() + Size);
support::endian::byte_swap<T, support::endianness::little>(Val);
Size += sizeof(T); Size += sizeof(T);
if (std::is_floating_point<T>::value) { if (std::is_floating_point<T>::value) {
MI.addOperand(MCOperand::createFPImm(static_cast<double>(Val))); MI.addOperand(MCOperand::createFPImm(static_cast<double>(Val)));

View File

@ -33,9 +33,7 @@
# CHECK: i64.trunc_sat_f64_u # CHECK: i64.trunc_sat_f64_u
0xFC 0x07 0xFC 0x07
# FIXME Disabled temporarily due to failures in clang-ppc64be-linux and # CHECK: v128.const 50462976, 117835012, 185207048, 252579084
# clang-s390x-linux bots
# C HECK: v128.const 50462976, 117835012, 185207048, 252579084
0xFD 0x02 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0xFD 0x02 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
# CHECK: v8x16.shuffle 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 # CHECK: v8x16.shuffle 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15