From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 13AB23858281; Tue, 20 Dec 2022 21:55:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 13AB23858281 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1671573302; bh=D381afBynRilWxM9nma1D/8Mjab4H9ztvfhq1VKRfsw=; h=From:To:Subject:Date:From; b=Tmo5Bvv/MV3uTVW84zl1UQeNJ/5AzdF3/nETFdK1zSS6gOnbmdFz4etTcmohS+LX2 3r9VJqOuzjMgqqIkorgRyNHYiVwJieIVWfwKIgPJ4VgHnJhsrxaO+RJoohzRmoB4rk JLmpIZ/jQR/vyVPWtUYQVjwyw3UXfiglI3V4jwMg= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: x86_64: import swab.S from NetBSD X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/master X-Git-Oldrev: 43743ed754727a0ab5bbe9b15068d3256791f011 X-Git-Newrev: 2af7dd95671197f43fb8c2c6d30461c143d63b03 Message-Id: <20221220215502.13AB23858281@sourceware.org> Date: Tue, 20 Dec 2022 21:55:02 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D2af7dd95671= 197f43fb8c2c6d30461c143d63b03 commit 2af7dd95671197f43fb8c2c6d30461c143d63b03 Author: Corinna Vinschen AuthorDate: Tue Dec 20 10:19:23 2022 +0100 Commit: Corinna Vinschen CommitDate: Tue Dec 20 10:19:23 2022 +0100 Cygwin: x86_64: import swab.S from NetBSD =20 Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/Makefile.am | 1 + winsup/cygwin/x86_64/swab.S | 47 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 48 insertions(+) diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am index f8c249f527e7..0200f6e2a451 100644 --- a/winsup/cygwin/Makefile.am +++ b/winsup/cygwin/Makefile.am @@ -58,6 +58,7 @@ TARGET_FILES=3D \ x86_64/memmove.S \ x86_64/mempcpy.S \ x86_64/memset.S \ + x86_64/swab.S \ x86_64/wmemcpy.S \ x86_64/wmemmove.S \ x86_64/wmempcpy.S diff --git a/winsup/cygwin/x86_64/swab.S b/winsup/cygwin/x86_64/swab.S new file mode 100644 index 000000000000..ae73d1124762 --- /dev/null +++ b/winsup/cygwin/x86_64/swab.S @@ -0,0 +1,47 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +#if defined(LIBC_SCCS) + RCSID("$NetBSD: swab.S,v 1.4 2014/05/22 15:01:57 uebayasi Exp $") +#endif + +#define LOAD_SWAP_STORE_WORD \ + lodsw ; \ + xchgb %al,%ah ; \ + stosw + +ENTRY3(swab) + xchgq %rdi,%rsi + cld # set direction forward + + shrq $1,%rdx + testq $7,%rdx # copy first group of 1 to 7 words + jz L2 # while swapping alternate bytes. +L1: lodsw + rorw $8,%ax + stosw + decq %rdx + testq $7,%rdx + jnz L1 + +L2: shrq $3,%rdx # copy remainder 8 words at a time + jz L4 # while swapping alternate bytes. +L3: + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + + decq %rdx + jnz L3 +L4: + ret +END(swab)