Skip to content

Commit

Permalink
[AArch64] Fix the generation of BE Nops
Browse files Browse the repository at this point in the history
Big endian Nops were being generated as d5 03 20 1f   fnmadd  s21, s30,
s0, s0, getting the bytes of the NOP in the wrong order. This switches
the bytes to not be dependant on the endianness.

Differential Revision: https://reviews.llvm.org/D125980
  • Loading branch information
davemgreen committed May 20, 2022
1 parent 83c431f commit 1379b15
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
2 changes: 1 addition & 1 deletion llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ bool AArch64AsmBackend::writeNopData(raw_ostream &OS, uint64_t Count,
// We are properly aligned, so write NOPs as requested.
Count /= 4;
for (uint64_t i = 0; i != Count; ++i)
support::endian::write<uint32_t>(OS, 0xd503201f, Endian);
OS.write("\x1f\x20\x03\xd5", 4);
return true;
}

Expand Down
14 changes: 14 additions & 0 deletions llvm/test/MC/AArch64/align.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// RUN: llvm-mc -filetype=obj -triple aarch64-none-eabi %s | llvm-objdump -d - | FileCheck %s
// RUN: llvm-mc -filetype=obj -triple aarch64_be-none-eabi %s | llvm-objdump -d - | FileCheck %s

// CHECK: 0: 00 00 80 d2 mov x0, #0
// CHECK: 4: 00 00 80 d2 mov x0, #0
// CHECK: 8: 1f 20 03 d5 nop
// CHECK: c: 1f 20 03 d5 nop
// CHECK: 10: 00 00 80 d2 mov x0, #0

.text
mov x0, #0
mov x0, #0
.p2align 4
mov x0, #0

0 comments on commit 1379b15

Please sign in to comment.