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

Type casting in sse2neon.h incorrect #410

Open
StefanBruens opened this issue Nov 2, 2022 · 1 comment
Open

Type casting in sse2neon.h incorrect #410

StefanBruens opened this issue Nov 2, 2022 · 1 comment

Comments

@StefanBruens
Copy link

When compiling on Linux/aarch64, GCC throws many errors, e.g.:

  17s] [  3%] Building CXX object common/simd/CMakeFiles/simd.dir/sse.cpp.o
[   17s] cd /home/abuild/rpmbuild/BUILD/embree-3.13.5/build/common/simd && /usr/bin/c++ -DEMBREE_TARGET_SSE2 -DTASKING_INTERNAL  -fsigned-char -Wall -Wformat -Wformat-security -Wno-class-memaccess -fno-strict-overflow -fno-delete-null-pointer-checks -fwrapv -fsigned-char -fPIE -fPIC -std=c++11 -fvisibility=hidden -fvisibility-inlines-hidden -fno-strict-aliasing -fno-tree-vectorize -D_FORTIFY_SOURCE=2  -fsigned-char -g -DNDEBUG -O3  -D__SSE__ -D__SSE2__ -MD -MT common/simd/CMakeFiles/simd.dir/sse.cpp.o -MF CMakeFiles/simd.dir/sse.cpp.o.d -o CMakeFiles/simd.dir/sse.cpp.o -c /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/sse.cpp
[   17s] In file included from /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/emulation.h:12,
[   17s]                  from /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/intrinsics.h:13,
[   17s]                  from /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/sse.h:7,
[   17s]                  from /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/sse.cpp:4:
[   17s] /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/sse2neon.h: In function '__m128i _mm_hadds_epi16(__m128i, __m128i)':
[   17s] /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/sse2neon.h:6749:55: note: use '-flax-vector-conversions' to permit conversions between vectors with differing element types or numbers of subparts
[   17s]  6749 |         vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b)));
[   17s]       |                                                       ^
[   17s] /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/sse2neon.h:6748:33: error: cannot convert 'int64x2_t' to '__m128i' {aka 'int32x4_t'} in return
[   17s]  6748 |     return vreinterpretq_s64_s16(
[   17s]       |            ~~~~~~~~~~~~~~~~~~~~~^
[   17s]       |                                 |
[   17s]       |                                 int64x2_t
[   17s]  6749 |         vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b)));
[   17s]       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[   17s] /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/sse2neon.h: In function '__m128i _mm_hsubs_epi16(__m128i, __m128i)':
[   17s] /home/abuild/rpmbuild/BUILD/embree-3.13.5/common/simd/../sys/../simd/arm/sse2neon.h:6846:33: error: cannot convert 'int64x2_t' to '__m128i' {aka 'int32x4_t'} in return
[   17s]  6846 |     return vreinterpretq_s64_s16(
[   17s]       |            ~~~~~~~~~~~~~~~~~~~~~^
[   17s]       |                                 |
[   17s]       |                                 int64x2_t
[   17s]  6847 |         vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b)));
[   17s]       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For Apple Silicon, this is sidestepped with -flax-vector-conversions.

https://github.com/embree/embree/blob/489b746c0d5010e0da10345e9dc96768bec9a037/common/cmake/gnu.cmake#L86-L89

@svenwoop
Copy link
Contributor

svenwoop commented Nov 2, 2022

Could you please try the devel3 branch? It should fix this.

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

No branches or pull requests

2 participants