From: luo rixin Date: Wed, 19 May 2021 02:27:18 +0000 (+0800) Subject: common/crc32c_aarch64: fix crc32c unittest failed on aarch64 X-Git-Tag: v17.1.0~1919^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=06ca2eba72fa5c23602f45dfeb770c62d1f20a76;p=ceph.git common/crc32c_aarch64: fix crc32c unittest failed on aarch64 On centos 8.2 for aarch64 with gcc 8.3, the complier will use register v0 conflicting with the register v0 be usded in inline asm code. Adding the related registers into clobber list to inform complier avoiding the confict. Fixes: https://tracker.ceph.com/issues/50835 Signed-off-by: luo rixin --- diff --git a/src/common/crc32c_aarch64.c b/src/common/crc32c_aarch64.c index d15736a0cd9d..99e5883994c0 100644 --- a/src/common/crc32c_aarch64.c +++ b/src/common/crc32c_aarch64.c @@ -147,7 +147,7 @@ uint32_t ceph_crc32c_aarch64(uint32_t crc, unsigned char const *buffer, unsigned "mov x16, #0x8014 \n\t" "movk x16, #0x8f15, lsl 16 \n\t" "mov v0.2d[0], x16 \n\t" - :::"x16"); + :::"x16","v0","v1"); while ((length -= 1024) >= 0) { PREF1KL2(1024*3); @@ -178,7 +178,8 @@ uint32_t ceph_crc32c_aarch64(uint32_t crc, unsigned char const *buffer, unsigned "crc32cx %w[c0], wzr, %x[c0] \n\t" "eor %w[c], %w[c], %w[c0] \n\t" :[c1]"+r"(crc1), [c0]"+r"(crc0), [c2]"+r"(crc2), [c]"+r"(crc) - :[v]"r"(*((const uint64_t *)buffer))); + :[v]"r"(*((const uint64_t *)buffer)) + :"v0","v1","v2","v3"); buffer += sizeof(uint64_t); } #endif /* HAVE_ARMV8_CRC_CRYPTO_INTRINSICS */ @@ -229,7 +230,7 @@ uint32_t ceph_crc32c_aarch64(uint32_t crc, unsigned char const *buffer, unsigned __asm__("mov x16, #0xf38a \n\t" "movk x16, #0xe417, lsl 16 \n\t" "mov v1.2d[0], x16 \n\t" - :::"x16"); + :::"x16","v1"); while ((length -= 1024) >= 0) { __asm__("crc32cx %w[c0], %w[c], xzr\n\t" @@ -247,7 +248,8 @@ uint32_t ceph_crc32c_aarch64(uint32_t crc, unsigned char const *buffer, unsigned "mov %x[c0], v3.2d[0] \n\t" "crc32cx %w[c], wzr, %x[c0] \n\t" :[c]"=r"(crc) - :[c0]"r"(crc0)); + :[c0]"r"(crc0) + :"v1","v3"); } #endif /* HAVE_ARMV8_CRC_CRYPTO_INTRINSICS */