Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build error on big endian arm/aarch64 #348

Merged
merged 1 commit into from
Jun 1, 2023

Conversation

taiki-e
Copy link
Member

@taiki-e taiki-e commented May 13, 2023

stdarch provides arm/aarch64 table lookup intrinsics instructions only on little endian targets (rust-lang/stdarch@51904cd), so core_simd currently fails to build on big endian arm/aarch64 targets.

$ cargo build --target armeb-unknown-linux-gnueabi -Z build-std
   Compiling core_simd v0.1.0 (/Users/taiki/projects/forks/rust-lang/portable-simd/crates/core_simd)
error[E0432]: unresolved import `core::arch::arm::vtbl1_u8`
  --> crates/core_simd/src/swizzle_dyn.rs:22:42
   |
22 |         use core::arch::arm::{uint8x8_t, vtbl1_u8};
   |                                          ^^^^^^^^ no `vtbl1_u8` in `core_arch::arch::arm`

$ cargo build --target aarch64_be-unknown-linux-gnu -Z build-std
   Compiling core_simd v0.1.0 (/Users/taiki/projects/forks/rust-lang/portable-simd/crates/core_simd)
error[E0432]: unresolved imports `core::arch::aarch64::vqtbl1q_u8`, `core::arch::aarch64::vtbl1_u8`
  --> crates/core_simd/src/swizzle_dyn.rs:20:46
   |
20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtbl1_u8};
   |                                              ^^^^^^^^^^  ^^^^^^^^ no `vtbl1_u8` in `core_arch::arch::aarch64`
   |                                              |
   |                                              no `vqtbl1q_u8` in `core_arch::arch::aarch64`
   |
help: a similar name exists in the module
   |
20 |         use core::arch::aarch64::{uint8x8_t, vst1q_u8, vtbl1_u8};
   |                                              ~~~~~~~~
help: a similar name exists in the module
   |
20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtrn1_u8};
   |                                                          ~~~~~~~~

Since rust-lang/rust#111475 (nightly-2023-05-13), builds of these targets are broken due to this bug.

taiki-e added a commit to taiki-e/setup-cross-toolchain-action that referenced this pull request May 13, 2023
taiki-e added a commit to taiki-e/portable-atomic that referenced this pull request May 13, 2023
rust-lang/portable-simd#348

```
error[E0432]: unresolved imports `core::arch::aarch64::vqtbl1q_u8`, `core::arch::aarch64::vtbl1_u8`
   --> /home/runner/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/swizzle_dyn.rs:20:46
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtbl1_u8};
    |                                              ^^^^^^^^^^  ^^^^^^^^ no `vtbl1_u8` in `core_arch::arch::aarch64`
    |                                              |
    |                                              no `vqtbl1q_u8` in `core_arch::arch::aarch64`
    |
 help: a similar name exists in the module
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vst1q_u8, vtbl1_u8};
    |                                              ~~~~~~~~
 help: a similar name exists in the module
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtrn1_u8};
    |                                                          ~~~~~~~~
```
taiki-e added a commit to taiki-e/atomic-maybe-uninit that referenced this pull request May 13, 2023
rust-lang/portable-simd#348

```
error[E0432]: unresolved imports `core::arch::aarch64::vqtbl1q_u8`, `core::arch::aarch64::vtbl1_u8`
  --> /home/runner/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/swizzle_dyn.rs:20:46
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtbl1_u8};
    |                                              ^^^^^^^^^^  ^^^^^^^^ no `vtbl1_u8` in `core_arch::arch::aarch64`
    |                                              |
    |                                              no `vqtbl1q_u8` in `core_arch::arch::aarch64`
    |
 help: a similar name exists in the module
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vst1q_u8, vtbl1_u8};
    |                                              ~~~~~~~~
 help: a similar name exists in the module
    |
 20 |         use core::arch::aarch64::{uint8x8_t, vqtbl1q_u8, vtrn1_u8};
    |                                                          ~~~~~~~~
```
@calebzulawski
Copy link
Member

@workingjubilee I assume this is fine?

@workingjubilee
Copy link
Member

...wild.

@workingjubilee
Copy link
Member

workingjubilee commented May 16, 2023

This needs to be slightly different, gimme a bit.

@calebzulawski calebzulawski merged commit d975d8f into rust-lang:master Jun 1, 2023
@taiki-e taiki-e deleted the arm-big branch June 1, 2023 04:15
@Amanieu
Copy link
Member

Amanieu commented Jul 7, 2023

Can this be synced into rust-lang/rust? It is breaking the build for big-endian AArch64.

@workingjubilee
Copy link
Member

Signed and delivered, should be next in the pipe. Sorry about that!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants