Skip to content

rANS_static32x16pr_neon.c doesn't build on AArch32 #81

@clausecker

Description

@clausecker

Your code base has NEON-optimised code in rANS_static32x16pr_neon.c. Unfortunately, this code only builds on AArch64 (arm64). It does not build on AArch32 as many of the intrinsics used therein are not supported in AArch32 mode:

htscodecs/htscodecs/rANS_static32x16pr_neon.c:200:31: warning: implicit declaration of function 'vtrn1q_u32' is invalid in C99 [-Wimplicit-function-declaration]
            uint32x4_t A1_1 = vtrn1q_u32(A_1, B_1);
                              ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:200:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t A1_1 = vtrn1q_u32(A_1, B_1);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:201:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t C1_1 = vtrn1q_u32(C_1, D_1);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:202:31: warning: implicit declaration of function 'vtrn2q_u32' is invalid in C99 [-Wimplicit-function-declaration]
            uint32x4_t A2_1 = vtrn2q_u32(A_1, B_1);
                              ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:202:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t A2_1 = vtrn2q_u32(A_1, B_1);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:203:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t C2_1 = vtrn2q_u32(C_1, D_1);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:207:39: warning: implicit declaration of function 'vtrn1q_u64' is invalid in C99 [-Wimplicit-function-declaration]
            uint32x4_t Xmaxv1=u32_u64(vtrn1q_u64(u64_u32(A1_1),u64_u32(C1_1)));
                                      ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:207:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t Xmaxv1=u32_u64(vtrn1q_u64(u64_u32(A1_1),u64_u32(C1_1)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:208:39: warning: implicit declaration of function 'vtrn2q_u64' is invalid in C99 [-Wimplicit-function-declaration]
            uint32x4_t Biasv1=u32_u64(vtrn2q_u64(u64_u32(A1_1),u64_u32(C1_1)));
                                      ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:208:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t Biasv1=u32_u64(vtrn2q_u64(u64_u32(A1_1),u64_u32(C1_1)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:209:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t RFv1  =u32_u64(vtrn1q_u64(u64_u32(A2_1),u64_u32(C2_1)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:210:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t FSv1  =u32_u64(vtrn2q_u64(u64_u32(A2_1),u64_u32(C2_1)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:217:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t A1_2 = vtrn1q_u32(A_2, B_2);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:218:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t C1_2 = vtrn1q_u32(C_2, D_2);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:219:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t A2_2 = vtrn2q_u32(A_2, B_2);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:220:24: error: initializing 'uint32x4_t' (vector of 4 'uint32_t' values) with an expression of incompatible type 'int'
            uint32x4_t C2_2 = vtrn2q_u32(C_2, D_2);
                       ^      ~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:222:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t Xmaxv2=u32_u64(vtrn1q_u64(u64_u32(A1_2),u64_u32(C1_2)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:223:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t Biasv2=u32_u64(vtrn2q_u64(u64_u32(A1_2),u64_u32(C1_2)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:224:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t RFv2  =u32_u64(vtrn1q_u64(u64_u32(A2_2),u64_u32(C2_2)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:225:31: error: passing 'int' to parameter of incompatible type 'uint64x2_t' (vector of 2 'uint64_t' values)
            uint32x4_t FSv2  =u32_u64(vtrn2q_u64(u64_u32(A2_2),u64_u32(C2_2)));
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:205:42: note: expanded from macro 'u32_u64'
#define u32_u64(x) vreinterpretq_u32_u64((x))
                                         ^~~
/usr/lib/clang/13.0.0/include/arm_neon.h:32841:50: note: passing argument to parameter '__p0' here
__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __p0) {
                                                 ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:232:31: warning: implicit declaration of function 'vaddvq_u32' is invalid in C99 [-Wimplicit-function-declaration]
            uint32_t imask1 = vaddvq_u32(vandq_u32(Cv1, bit));
                              ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:237:21: warning: implicit declaration of function 'vqtbl1_u8' is invalid in C99 [-Wimplicit-function-declaration]
            norm1 = vqtbl1_u8(vreinterpretq_u8_u32(Rv1),vtab[imask1]);
                    ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:237:19: error: assigning to 'uint8x8_t' (vector of 8 'uint8_t' values) from incompatible type 'int'
            norm1 = vqtbl1_u8(vreinterpretq_u8_u32(Rv1),vtab[imask1]);
                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:238:19: error: assigning to 'uint8x8_t' (vector of 8 'uint8_t' values) from incompatible type 'int'
            norm2 = vqtbl1_u8(vreinterpretq_u8_u32(Rv2),vtab[imask2]);
                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htscodecs/htscodecs/rANS_static32x16pr_neon.c:264:31: warning: implicit declaration of function 'vmull_high_u32' is invalid in C99 [-Wimplicit-function-declaration]
            uint64x2_t qvh1 = vmull_high_u32(Rv1, RFv1);
                              ^
htscodecs/htscodecs/rANS_static32x16pr_neon.c:264:24: error: initializing 'uint64x2_t' (vector of 2 'uint64_t' values) with an expression of incompatible type 'int'
            uint64x2_t qvh1 = vmull_high_u32(Rv1, RFv1);
                       ^      ~~~~~~~~~~~~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]

Please adapt your build system to build this code on AArch64 only. Alternatively, fix the code so these files compile on AArch32, too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions