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

Address type mismatch warnings on aarch64 #313

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 82 additions & 39 deletions crc/aarch64/crc_aarch64_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,45 +27,88 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**********************************************************************/
#include <aarch64_multibinary.h>
#include "crc.h"
#include "crc64.h"

extern uint16_t
crc16_t10dif_pmull(uint16_t, uint8_t *, uint64_t);

extern uint16_t
crc16_t10dif_copy_pmull(uint16_t, uint8_t *, uint8_t *, uint64_t);

extern uint32_t
crc32_ieee_norm_pmull(uint32_t, uint8_t *, uint64_t);

extern unsigned int
crc32_iscsi_crc_ext(unsigned char *, int, unsigned int);
extern unsigned int
crc32_iscsi_3crc_fold(unsigned char *, int, unsigned int);
extern unsigned int
crc32_iscsi_refl_pmull(unsigned char *, int, unsigned int);

extern uint32_t
crc32_gzip_refl_crc_ext(uint32_t, uint8_t *, uint64_t);
extern uint32_t
crc32_gzip_refl_3crc_fold(uint32_t, uint8_t *, uint64_t);
extern uint32_t
crc32_gzip_refl_pmull(uint32_t, uint8_t *, uint64_t);

extern uint64_t
crc64_ecma_refl_pmull(uint64_t, const unsigned char *, uint64_t);

extern uint64_t
crc64_ecma_norm_pmull(uint64_t, const unsigned char *, uint64_t);

extern uint64_t
crc64_iso_refl_pmull(uint64_t, const unsigned char *, uint64_t);

extern uint64_t
crc64_iso_norm_pmull(uint64_t, const unsigned char *, uint64_t);

extern uint64_t
crc64_jones_refl_pmull(uint64_t, const unsigned char *, uint64_t);

extern uint64_t
crc64_jones_norm_pmull(uint64_t, const unsigned char *, uint64_t);

DEFINE_INTERFACE_DISPATCHER(crc16_t10dif)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc16_t10dif_pmull);
return crc16_t10dif_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc16_t10dif_pmull);
return crc16_t10dif_pmull;
#endif
return PROVIDER_BASIC(crc16_t10dif);
return crc16_t10dif_base;
}

DEFINE_INTERFACE_DISPATCHER(crc16_t10dif_copy)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc16_t10dif_copy_pmull);
return crc16_t10dif_copy_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc16_t10dif_copy_pmull);
return crc16_t10dif_copy_pmull;
#endif
return PROVIDER_BASIC(crc16_t10dif_copy);
return crc16_t10dif_copy_base;
}

DEFINE_INTERFACE_DISPATCHER(crc32_ieee)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL) {
return PROVIDER_INFO(crc32_ieee_norm_pmull);
return crc32_ieee_norm_pmull;
}
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc32_ieee_norm_pmull);
return crc32_ieee_norm_pmull;
#endif
return PROVIDER_BASIC(crc32_ieee);
return crc32_ieee_base;
}

DEFINE_INTERFACE_DISPATCHER(crc32_iscsi)
Expand All @@ -77,23 +120,23 @@ DEFINE_INTERFACE_DISPATCHER(crc32_iscsi)
case MICRO_ARCH_ID(ARM, NEOVERSE_N1):
case MICRO_ARCH_ID(ARM, CORTEX_A57):
case MICRO_ARCH_ID(ARM, CORTEX_A72):
return PROVIDER_INFO(crc32_iscsi_crc_ext);
return crc32_iscsi_crc_ext;
}
}
if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) {
return PROVIDER_INFO(crc32_iscsi_3crc_fold);
return crc32_iscsi_3crc_fold;
}

if (auxval & HWCAP_PMULL) {
return PROVIDER_INFO(crc32_iscsi_refl_pmull);
return crc32_iscsi_refl_pmull;
}
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_CRC32_KEY))
return PROVIDER_INFO(crc32_iscsi_3crc_fold);
return crc32_iscsi_3crc_fold;
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc32_iscsi_refl_pmull);
return crc32_iscsi_refl_pmull;
#endif
return PROVIDER_BASIC(crc32_iscsi);
return crc32_iscsi_base;
}

DEFINE_INTERFACE_DISPATCHER(crc32_gzip_refl)
Expand All @@ -106,22 +149,22 @@ DEFINE_INTERFACE_DISPATCHER(crc32_gzip_refl)
case MICRO_ARCH_ID(ARM, NEOVERSE_N1):
case MICRO_ARCH_ID(ARM, CORTEX_A57):
case MICRO_ARCH_ID(ARM, CORTEX_A72):
return PROVIDER_INFO(crc32_gzip_refl_crc_ext);
return crc32_gzip_refl_crc_ext;
}
}
if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) {
return PROVIDER_INFO(crc32_gzip_refl_3crc_fold);
return crc32_gzip_refl_3crc_fold;
}

if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc32_gzip_refl_pmull);
return crc32_gzip_refl_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_CRC32_KEY))
return PROVIDER_INFO(crc32_gzip_refl_3crc_fold);
return crc32_gzip_refl_3crc_fold;
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc32_gzip_refl_pmull);
return crc32_gzip_refl_pmull;
#endif
return PROVIDER_BASIC(crc32_gzip_refl);
return crc32_gzip_refl_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_ecma_refl)
Expand All @@ -130,75 +173,75 @@ DEFINE_INTERFACE_DISPATCHER(crc64_ecma_refl)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_ecma_refl_pmull);
return crc64_ecma_refl_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_ecma_refl_pmull);
return crc64_ecma_refl_pmull;
#endif
return PROVIDER_BASIC(crc64_ecma_refl);
return crc64_ecma_refl_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_ecma_norm)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_ecma_norm_pmull);
return crc64_ecma_norm_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_ecma_norm_pmull);
return crc64_ecma_norm_pmull;
#endif
return PROVIDER_BASIC(crc64_ecma_norm);
return crc64_ecma_norm_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_iso_refl)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_iso_refl_pmull);
return crc64_iso_refl_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_iso_refl_pmull);
return crc64_iso_refl_pmull;
#endif
return PROVIDER_BASIC(crc64_iso_refl);
return crc64_iso_refl_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_iso_norm)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_iso_norm_pmull);
return crc64_iso_norm_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_iso_norm_pmull);
return crc64_iso_norm_pmull;
#endif
return PROVIDER_BASIC(crc64_iso_norm);
return crc64_iso_norm_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_jones_refl)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_jones_refl_pmull);
return crc64_jones_refl_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_jones_refl_pmull);
return crc64_jones_refl_pmull;
#endif
return PROVIDER_BASIC(crc64_jones_refl);
return crc64_jones_refl_base;
}

DEFINE_INTERFACE_DISPATCHER(crc64_jones_norm)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);
if (auxval & HWCAP_PMULL)
return PROVIDER_INFO(crc64_jones_norm_pmull);
return crc64_jones_norm_pmull;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_PMULL_KEY))
return PROVIDER_INFO(crc64_jones_norm_pmull);
return crc64_jones_norm_pmull;
#endif
return PROVIDER_BASIC(crc64_jones_norm);
return crc64_jones_norm_base;
}
79 changes: 53 additions & 26 deletions erasure_code/aarch64/ec_aarch64_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,49 @@
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**********************************************************************/
#include <aarch64_multibinary.h>
#include "erasure_code.h"
#include "gf_vect_mul.h"

extern void
gf_vect_dot_prod_sve(int, int, unsigned char *, unsigned char **, unsigned char *);
extern void
gf_vect_dot_prod_neon(int, int, unsigned char *, unsigned char **, unsigned char *);

extern void
gf_vect_mad_sve(int, int, int, unsigned char *, unsigned char *, unsigned char *);
extern void
gf_vect_mad_neon(int, int, int, unsigned char *, unsigned char *, unsigned char *);

extern void
ec_encode_data_sve(int, int, int, unsigned char *, unsigned char **, unsigned char **coding);
extern void
ec_encode_data_neon(int, int, int, unsigned char *, unsigned char **, unsigned char **);

extern void
ec_encode_data_update_sve(int, int, int, int, unsigned char *, unsigned char *, unsigned char **);
extern void
ec_encode_data_update_neon(int, int, int, int, unsigned char *, unsigned char *, unsigned char **);

extern int
gf_vect_mul_sve(int, unsigned char *, unsigned char *, unsigned char *);
extern int
gf_vect_mul_neon(int, unsigned char *, unsigned char *, unsigned char *);

DEFINE_INTERFACE_DISPATCHER(gf_vect_dot_prod)
{
#if defined(__linux__)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_SVE)
return PROVIDER_INFO(gf_vect_dot_prod_sve);
return gf_vect_dot_prod_sve;
if (auxval & HWCAP_ASIMD)
return PROVIDER_INFO(gf_vect_dot_prod_neon);
return gf_vect_dot_prod_neon;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_SVE_KEY))
return PROVIDER_INFO(gf_vect_dot_prod_sve);
return PROVIDER_INFO(gf_vect_dot_prod_neon);
return gf_vect_dot_prod_sve;
return gf_vect_dot_prod_neon;
#endif
return PROVIDER_BASIC(gf_vect_dot_prod);
return gf_vect_dot_prod_base;
}

DEFINE_INTERFACE_DISPATCHER(gf_vect_mad)
Expand All @@ -51,15 +78,15 @@ DEFINE_INTERFACE_DISPATCHER(gf_vect_mad)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_SVE)
return PROVIDER_INFO(gf_vect_mad_sve);
return gf_vect_mad_sve;
if (auxval & HWCAP_ASIMD)
return PROVIDER_INFO(gf_vect_mad_neon);
return gf_vect_mad_neon;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_SVE_KEY))
return PROVIDER_INFO(gf_vect_mad_sve);
return PROVIDER_INFO(gf_vect_mad_neon);
return gf_vect_mad_sve;
return gf_vect_mad_neon;
#endif
return PROVIDER_BASIC(gf_vect_mad);
return gf_vect_mad_base;
}

DEFINE_INTERFACE_DISPATCHER(ec_encode_data)
Expand All @@ -68,15 +95,15 @@ DEFINE_INTERFACE_DISPATCHER(ec_encode_data)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_SVE)
return PROVIDER_INFO(ec_encode_data_sve);
return ec_encode_data_sve;
if (auxval & HWCAP_ASIMD)
return PROVIDER_INFO(ec_encode_data_neon);
return ec_encode_data_neon;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_SVE_KEY))
return PROVIDER_INFO(ec_encode_data_sve);
return PROVIDER_INFO(ec_encode_data_neon);
return ec_encode_data_sve;
return ec_encode_data_neon;
#endif
return PROVIDER_BASIC(ec_encode_data);
return ec_encode_data_base;
}

DEFINE_INTERFACE_DISPATCHER(ec_encode_data_update)
Expand All @@ -85,15 +112,15 @@ DEFINE_INTERFACE_DISPATCHER(ec_encode_data_update)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_SVE)
return PROVIDER_INFO(ec_encode_data_update_sve);
return ec_encode_data_update_sve;
if (auxval & HWCAP_ASIMD)
return PROVIDER_INFO(ec_encode_data_update_neon);
return ec_encode_data_update_neon;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_SVE_KEY))
return PROVIDER_INFO(ec_encode_data_update_sve);
return PROVIDER_INFO(ec_encode_data_update_neon);
return ec_encode_data_update_sve;
return ec_encode_data_update_neon;
#endif
return PROVIDER_BASIC(ec_encode_data_update);
return ec_encode_data_update_base;
}

DEFINE_INTERFACE_DISPATCHER(gf_vect_mul)
Expand All @@ -102,15 +129,15 @@ DEFINE_INTERFACE_DISPATCHER(gf_vect_mul)
unsigned long auxval = getauxval(AT_HWCAP);

if (auxval & HWCAP_SVE)
return PROVIDER_INFO(gf_vect_mul_sve);
return gf_vect_mul_sve;
if (auxval & HWCAP_ASIMD)
return PROVIDER_INFO(gf_vect_mul_neon);
return gf_vect_mul_neon;
#elif defined(__APPLE__)
if (sysctlEnabled(SYSCTL_SVE_KEY))
return PROVIDER_INFO(gf_vect_mul_sve);
return PROVIDER_INFO(gf_vect_mul_neon);
return gf_vect_mul_sve;
return gf_vect_mul_neon;
#endif
return PROVIDER_BASIC(gf_vect_mul);
return gf_vect_mul_base;
}

DEFINE_INTERFACE_DISPATCHER(ec_init_tables) { return PROVIDER_BASIC(ec_init_tables); }
DEFINE_INTERFACE_DISPATCHER(ec_init_tables) { return ec_init_tables_base; }
2 changes: 1 addition & 1 deletion igzip/aarch64/igzip_isal_adler32_neon.S
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Macros
.endm

/*
uint32_t adler32_neon(uint32_t adler32, uint8_t * start, uint32_t length);
uint32_t adler32_neon(uint32_t adler32, uint8_t * start, uint64_t length);
*/
/*
Arguments list
Expand Down
Loading
Loading