From nobody Tue May 30 08:19:52 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4QVlgX2nzRz4Y52R; Tue, 30 May 2023 08:19:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4QVlgX2Dp5z3k7M; Tue, 30 May 2023 08:19:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1685434792; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9FHccJz4+1rwg9gaplRcCkUlf3qR45Bfs3pp5ot6orE=; b=soJ3RFHEYGVdfVyLp0nrPKVhnXGYOza494QzhzfEqvk/FBTN+tAlka9vaVLqF8CNazmiE+ M3b80hMBMzBTdANdZt9H6lSxy9tvfGViau0ytxVyXFQ4SzCtBmYykEkgr02IKxgGvnjJGV xzPwFZE8le9aS6oYn2icW5DUIqGy78TiYvmTM3nFN1hvibKqVggu6AfcK7SjxCHi/75nGL Vhjj7oJjhuYygwIB+7xQmuE3ZW0EI9bkJ+cvoc9UEcZVsFhbjl/MIOs5XR0qmhh1tpTsVz BuaSUzNcNyPXPpKDC3P2nUML1xfPOs8q4bzsoCryQpx5K+rY8SaQ85G6Jvcupg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1685434792; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=9FHccJz4+1rwg9gaplRcCkUlf3qR45Bfs3pp5ot6orE=; b=VIY1zDl9Cmcm0N28H4scaZmRvn4SH0NpTsCX7gDGOPdN0Qo3qIiqnZh7uxc/uHp3gOjgnf 0SL5iRCUN2msAxXjo6Ue6f4Wyd8gyKOwM+eckgQSVaJj4hW9O7Jw9BNoKhwtlC0at4u7be s/zRiCcAKAeZEz7TNnxjnh9yck0OXO5Z5IjI7+8PS8F8LdNJxLFupsTxquab83z4zzMO2l 0GP2LeGWpVa4SCBJL/bayiYl5IP7F2ZSeQQ2H2Of/BlUL+RqGn9plbxchfGGIC3XLyRjuP lAh3Id6NyoTSfsNbQnu90WJy3sOXkt1mKh/H3Q/C4H5SH0S5gXeMRKdZaLhl5Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1685434792; a=rsa-sha256; cv=none; b=a9r3iXpNvWJTThAHu1hB+HgmLWQ3YlLtYnm30edzeNTBA0kvQCP7vKkBfzMUl3XrB8Je2p zADSf+bOJrAT1aldLSQdirpltgQ7XbQaQfo6XX6sJsYxp7mr9OdKCPyStVWoPAjs08Gzmi epUczuyUhyaJeAWPxtbyeioH7Ti59c/aqewpdl8YoXEK6aVoZxeBlS2X/Kg9nuPrq20HsJ s11Z06hvN4/EShNsGcrJrEDU2ufVqq3LpAeh0RiLq43OlwZBWjF5NmVFi7Z3Dni4FmVFeV qEsblh4CmHv8vEUQVFpjXCE3bb3uP0o9/0GaiOCuaq6hxPMvk6fPYdAzgQxdbA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4QVlgX1GgxzmFP; Tue, 30 May 2023 08:19:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 34U8JqaL039912; Tue, 30 May 2023 08:19:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 34U8Jqqq039911; Tue, 30 May 2023 08:19:52 GMT (envelope-from git) Date: Tue, 30 May 2023 08:19:52 GMT Message-Id: <202305300819.34U8Jqqq039911@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dmitry Chagin Subject: git: 68348f41c9b0 - main - avx_sig: Prepare to add arm64 neon test List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 68348f41c9b089584c03aaab75a5257617666890 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=68348f41c9b089584c03aaab75a5257617666890 commit 68348f41c9b089584c03aaab75a5257617666890 Author: Dmitry Chagin AuthorDate: 2023-05-30 08:18:57 +0000 Commit: Dmitry Chagin CommitDate: 2023-05-30 08:18:57 +0000 avx_sig: Prepare to add arm64 neon test Move inlined asm code to a separate source and rename x86 specific xmm names to more general simd names. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D40312 --- tools/test/avx_sig/Makefile | 14 +++++++ tools/test/avx_sig/avx_sig.c | 83 ++++++++++++++++------------------------ tools/test/avx_sig/c2x2c_amd64.S | 55 ++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 49 deletions(-) diff --git a/tools/test/avx_sig/Makefile b/tools/test/avx_sig/Makefile new file mode 100644 index 000000000000..695cdc0a4a94 --- /dev/null +++ b/tools/test/avx_sig/Makefile @@ -0,0 +1,14 @@ + +.include + +PROG= avx_sig +SRCS= avx_sig.c +MAN= + +LIBADD= pthread + +.if ${MACHINE_CPUARCH} == "amd64" +SRCS+= c2x2c_amd64.S +.endif + +.include diff --git a/tools/test/avx_sig/avx_sig.c b/tools/test/avx_sig/avx_sig.c index 6c6250f1c25d..6ead5d8ce312 100644 --- a/tools/test/avx_sig/avx_sig.c +++ b/tools/test/avx_sig/avx_sig.c @@ -48,33 +48,18 @@ #define nitems(x) (sizeof((x)) / sizeof((x)[0])) #endif -struct xmmreg { - uint8_t xmm_bytes[16]; -}; +#define SIMDRNAM "xmm" -struct xmm { - struct xmmreg xmmreg[16]; +struct simdreg { + uint8_t simd_bytes[16]; }; -#define X2C(r) asm("movdqu %0, %%xmm" #r : "=m" (xmm->xmmreg[r])) -#define C2X(r) asm("movdqu %%xmm" #r ", %0" : : "m" (xmm->xmmreg[r]) : "xmm" #r) - -static void -cpu_to_xmm(struct xmm *xmm) -{ - C2X(0); C2X(1); C2X(2); C2X(3); C2X(4); C2X(5); C2X(6); C2X(7); - C2X(8); C2X(9); C2X(10); C2X(11); C2X(12); C2X(13); C2X(14); C2X(15); -} - -static void -xmm_to_cpu(struct xmm *xmm) -{ - X2C(0); X2C(1); X2C(2); X2C(3); X2C(4); X2C(5); X2C(6); X2C(7); - X2C(8); X2C(9); X2C(10); X2C(11); X2C(12); X2C(13); X2C(14); X2C(15); -} +struct simd { + struct simdreg simdreg[16]; +}; -#undef C2X -#undef X2C +void cpu_to_simd(struct simd *simd); +void simd_to_cpu(struct simd *simd); static atomic_uint sigs; @@ -96,23 +81,23 @@ sigalrm_handler(int sig __unused) alarm(TIMO); } -static struct xmm zero_xmm = {}; +static struct simd zero_simd = {}; static void -fill_xmm(struct xmm *xmm) +fill_simd(struct simd *simd) { - arc4random_buf(xmm, sizeof(*xmm)); + arc4random_buf(simd, sizeof(*simd)); } static void -dump_xmm(const struct xmmreg *r) +dump_simd(const struct simdreg *r) { unsigned k; - for (k = 0; k < nitems(r->xmm_bytes); k++) { + for (k = 0; k < nitems(r->simd_bytes); k++) { if (k != 0) printf(" "); - printf("%02x", r->xmm_bytes[k]); + printf("%02x", r->simd_bytes[k]); } printf("\n"); } @@ -120,9 +105,9 @@ dump_xmm(const struct xmmreg *r) static pthread_mutex_t show_lock; static void -show_diff(const struct xmm *xmm1, const struct xmm *xmm2) +show_diff(const struct simd *simd1, const struct simd *simd2) { - const struct xmmreg *r1, *r2; + const struct simdreg *r1, *r2; unsigned i, j; #if defined(__FreeBSD__) @@ -130,14 +115,14 @@ show_diff(const struct xmm *xmm1, const struct xmm *xmm2) #elif defined(__linux__) printf("thr %ld\n", syscall(SYS_gettid)); #endif - for (i = 0; i < nitems(xmm1->xmmreg); i++) { - r1 = &xmm1->xmmreg[i]; - r2 = &xmm2->xmmreg[i]; - for (j = 0; j < nitems(r1->xmm_bytes); j++) { - if (r1->xmm_bytes[j] != r2->xmm_bytes[j]) { - printf("xmm%u\n", i); - dump_xmm(r1); - dump_xmm(r2); + for (i = 0; i < nitems(simd1->simdreg); i++) { + r1 = &simd1->simdreg[i]; + r2 = &simd2->simdreg[i]; + for (j = 0; j < nitems(r1->simd_bytes); j++) { + if (r1->simd_bytes[j] != r2->simd_bytes[j]) { + printf("%%%s%u\n", SIMDRNAM, i); + dump_simd(r1); + dump_simd(r2); break; } } @@ -153,26 +138,26 @@ my_pause(void) static void * worker_thread(void *arg __unused) { - struct xmm xmm, xmm_cpu; + struct simd simd, simd_cpu; - fill_xmm(&xmm); + fill_simd(&simd); for (;;) { - xmm_to_cpu(&xmm); + simd_to_cpu(&simd); my_pause(); - cpu_to_xmm(&xmm_cpu); - if (memcmp(&xmm, &xmm_cpu, sizeof(struct xmm)) != 0) { + cpu_to_simd(&simd_cpu); + if (memcmp(&simd, &simd_cpu, sizeof(struct simd)) != 0) { pthread_mutex_lock(&show_lock); - show_diff(&xmm, &xmm_cpu); + show_diff(&simd, &simd_cpu); abort(); pthread_mutex_unlock(&show_lock); } - xmm_to_cpu(&zero_xmm); + simd_to_cpu(&zero_simd); my_pause(); - cpu_to_xmm(&xmm_cpu); - if (memcmp(&zero_xmm, &xmm_cpu, sizeof(struct xmm)) != 0) { + cpu_to_simd(&simd_cpu); + if (memcmp(&zero_simd, &simd_cpu, sizeof(struct simd)) != 0) { pthread_mutex_lock(&show_lock); - show_diff(&zero_xmm, &xmm_cpu); + show_diff(&zero_simd, &simd_cpu); abort(); pthread_mutex_unlock(&show_lock); } diff --git a/tools/test/avx_sig/c2x2c_amd64.S b/tools/test/avx_sig/c2x2c_amd64.S new file mode 100644 index 000000000000..bd18ac979000 --- /dev/null +++ b/tools/test/avx_sig/c2x2c_amd64.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: + movdqu %xmm0, (%rdi) + movdqu %xmm1, 1 * 16(%rdi) + movdqu %xmm2, 2 * 16(%rdi) + movdqu %xmm3, 3 * 16(%rdi) + movdqu %xmm4, 4 * 16(%rdi) + movdqu %xmm5, 5 * 16(%rdi) + movdqu %xmm6, 6 * 16(%rdi) + movdqu %xmm7, 7 * 16(%rdi) + movdqu %xmm8, 8 * 16(%rdi) + movdqu %xmm9, 9 * 16(%rdi) + movdqu %xmm10, 10 * 16(%rdi) + movdqu %xmm11, 11 * 16(%rdi) + movdqu %xmm12, 12 * 16(%rdi) + movdqu %xmm13, 13 * 16(%rdi) + movdqu %xmm14, 14 * 16(%rdi) + movdqu %xmm15, 15 * 16(%rdi) + retq + + .size cpu_to_simd, . - cpu_to_simd + + + .global simd_to_cpu + .type simd_to_cpu, @function +simd_to_cpu: + movdqu (%rdi), %xmm0 + movdqu 1 * 16(%rdi), %xmm1 + movdqu 2 * 16(%rdi), %xmm2 + movdqu 3 * 16(%rdi), %xmm3 + movdqu 4 * 16(%rdi), %xmm4 + movdqu 5 * 16(%rdi), %xmm5 + movdqu 6 * 16(%rdi), %xmm6 + movdqu 7 * 16(%rdi), %xmm7 + movdqu 8 * 16(%rdi), %xmm8 + movdqu 9 * 16(%rdi), %xmm9 + movdqu 10 * 16(%rdi), %xmm10 + movdqu 11 * 16(%rdi), %xmm11 + movdqu 12 * 16(%rdi), %xmm12 + movdqu 13 * 16(%rdi), %xmm13 + movdqu 14 * 16(%rdi), %xmm14 + movdqu 15 * 16(%rdi), %xmm15 + retq + + .size simd_to_cpu, . - simd_to_cpu + + .section .note.GNU-stack,"",@progbits