From 4f2c2a122c6fc1e129f93767234ae8107fcf5d0d Mon Sep 17 00:00:00 2001 From: Dmitry Chagin Date: Tue, 30 May 2023 11:19:40 +0300 Subject: [PATCH] avx_sig: Adapt avx_sig test for Aarch64 Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D40309 --- tools/test/avx_sig/Makefile | 3 ++ tools/test/avx_sig/avx_sig.c | 8 ++++- tools/test/avx_sig/c2x2c_aarch64.S | 55 ++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tools/test/avx_sig/c2x2c_aarch64.S diff --git a/tools/test/avx_sig/Makefile b/tools/test/avx_sig/Makefile index 695cdc0a4a94..13a8d3546a83 100644 --- a/tools/test/avx_sig/Makefile +++ b/tools/test/avx_sig/Makefile @@ -10,5 +10,8 @@ LIBADD= pthread .if ${MACHINE_CPUARCH} == "amd64" SRCS+= c2x2c_amd64.S .endif +.if ${MACHINE_CPUARCH} == "aarch64" +SRCS+= c2x2c_aarch64.S +.endif .include diff --git a/tools/test/avx_sig/avx_sig.c b/tools/test/avx_sig/avx_sig.c index 6ead5d8ce312..19fb85f2e803 100644 --- a/tools/test/avx_sig/avx_sig.c +++ b/tools/test/avx_sig/avx_sig.c @@ -48,14 +48,20 @@ #define nitems(x) (sizeof((x)) / sizeof((x)[0])) #endif +#if defined(__amd64__) #define SIMDRNAM "xmm" +#define NREGS 16 +#elif defined(__aarch64__) +#define SIMDRNAM "q" +#define NREGS 32 +#endif struct simdreg { uint8_t simd_bytes[16]; }; struct simd { - struct simdreg simdreg[16]; + struct simdreg simdreg[NREGS]; }; void cpu_to_simd(struct simd *simd); diff --git a/tools/test/avx_sig/c2x2c_aarch64.S b/tools/test/avx_sig/c2x2c_aarch64.S new file mode 100644 index 000000000000..eebe1f334546 --- /dev/null +++ b/tools/test/avx_sig/c2x2c_aarch64.S @@ -0,0 +1,55 @@ +/* + * This file is in public domain. + * Written by Dmitry Chagin + * + * $FreeBSD$ + */ + + .global cpu_to_simd + .type cpu_to_simd, @function +cpu_to_simd: + stp q0, q1, [x0, #( 0 * 16)] + stp q2, q3, [x0, #( 2 * 16)] + stp q4, q5, [x0, #( 4 * 16)] + stp q6, q7, [x0, #( 6 * 16)] + stp q8, q9, [x0, #( 8 * 16)] + stp q10, q11, [x0, #(10 * 16)] + stp q12, q13, [x0, #(12 * 16)] + stp q14, q15, [x0, #(14 * 16)] + stp q16, q17, [x0, #(16 * 16)] + stp q18, q19, [x0, #(18 * 16)] + stp q20, q21, [x0, #(20 * 16)] + stp q22, q23, [x0, #(22 * 16)] + stp q24, q25, [x0, #(24 * 16)] + stp q26, q27, [x0, #(26 * 16)] + stp q28, q29, [x0, #(28 * 16)] + stp q30, q31, [x0, #(30 * 16)] + ret + + .size cpu_to_simd, . - cpu_to_simd + + + .global simd_to_cpu + .type simd_to_cpu, @function +simd_to_cpu: + ldp q0, q1, [x0, #( 0 * 16)] + ldp q2, q3, [x0, #( 2 * 16)] + ldp q4, q5, [x0, #( 4 * 16)] + ldp q6, q7, [x0, #( 6 * 16)] + ldp q8, q9, [x0, #( 8 * 16)] + ldp q10, q11, [x0, #(10 * 16)] + ldp q12, q13, [x0, #(12 * 16)] + ldp q14, q15, [x0, #(14 * 16)] + ldp q16, q17, [x0, #(16 * 16)] + ldp q18, q19, [x0, #(18 * 16)] + ldp q20, q21, [x0, #(20 * 16)] + ldp q22, q23, [x0, #(22 * 16)] + ldp q24, q25, [x0, #(24 * 16)] + ldp q26, q27, [x0, #(26 * 16)] + ldp q28, q29, [x0, #(28 * 16)] + ldp q30, q31, [x0, #(30 * 16)] + ret + + .size simd_to_cpu, . - simd_to_cpu + + .section .note.GNU-stack,"",@progbits