summaryrefslogtreecommitdiff
path: root/bootstrap/llvm18/m68k-endianness.patch
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2024-12-06 19:22:35 +0000
committerZach van Rijn <me@zv.io>2024-12-06 19:22:37 +0000
commit57762abcbf59410fc77ac48a3027bdee08c9291f (patch)
tree089c78d5e2738f92acc7dd22fbc18daa53bfd480 /bootstrap/llvm18/m68k-endianness.patch
parentcf1b9041544c3a70181778535ba310653593e9c3 (diff)
downloadpackages-57762abcbf59410fc77ac48a3027bdee08c9291f.tar.gz
packages-57762abcbf59410fc77ac48a3027bdee08c9291f.tar.bz2
packages-57762abcbf59410fc77ac48a3027bdee08c9291f.tar.xz
packages-57762abcbf59410fc77ac48a3027bdee08c9291f.zip
bootstrap/llvm18: replace symlink with files.
Note: default_llvm="no" Effectively reverts 1c7549b7bb4dcf1142d6c19876841ccc93fcafd5 since 'abuild' uses readlink to derive repository information. The user/llvm18 package is free to be updated independently.
Diffstat (limited to 'bootstrap/llvm18/m68k-endianness.patch')
-rw-r--r--bootstrap/llvm18/m68k-endianness.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/bootstrap/llvm18/m68k-endianness.patch b/bootstrap/llvm18/m68k-endianness.patch
new file mode 100644
index 000000000..49e96a995
--- /dev/null
+++ b/bootstrap/llvm18/m68k-endianness.patch
@@ -0,0 +1,26 @@
+Upstream: https://github.com/llvm/llvm-project/issues/94726
+
+diff --git a/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h b/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
+index 1376b06bef6f..62ea03cc9760 100644
+--- a/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
++++ b/lib/Target/M68k/MCTargetDesc/M68kBaseInfo.h
+@@ -85,9 +85,16 @@ template <typename value_t> value_t swapWord(value_t Val) {
+ Val = support::endian::byte_swap(Val, llvm::endianness::big);
+ value_t NewVal = 0;
+ for (unsigned i = 0U; i != NumWords; ++i) {
+- uint16_t Part = (Val >> (i * 16)) & 0xFFFF;
+- Part = support::endian::byte_swap(Part, llvm::endianness::big);
+- NewVal |= (Part << (i * 16));
++ if (llvm::endianness::native == llvm::endianness::big) {
++ uint16_t Lo = (Val >> (i * 16)) & 0xFFFF;
++ NewVal |= (Lo << (++i * 16));
++ uint16_t Hi = (Val >> (++i * 16)) & 0xFFFF;
++ NewVal |= (Hi << ((i - 1) * 16));
++ } else {
++ uint16_t Part = (Val >> (i * 16)) & 0xFFFF;
++ Part = support::endian::byte_swap(Part, llvm::endianness::big);
++ NewVal |= (Part << (i * 16));
++ }
+ }
+ return NewVal;
+ }