summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/arch/m68k/string/swab.S55
1 files changed, 40 insertions, 15 deletions
diff --git a/lib/libc/arch/m68k/string/swab.S b/lib/libc/arch/m68k/string/swab.S
index 4a93118be97..46ddf7cc3bd 100644
--- a/lib/libc/arch/m68k/string/swab.S
+++ b/lib/libc/arch/m68k/string/swab.S
@@ -1,23 +1,48 @@
+/* $OpenBSD: swab.S,v 1.4 2002/06/18 08:34:46 espie Exp $ */
+/*
+ * Copyright (c) 2002 Marc Espie.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD
+ * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#include "DEFS.h"
#if defined(LIBC_SCCS)
.text
- .asciz "$OpenBSD: swab.S,v 1.3 1996/08/19 08:15:29 tholo Exp $"
+ .asciz "$OpenBSD: swab.S,v 1.4 2002/06/18 08:34:46 espie Exp $"
#endif /* LIBC_SCCS */
ENTRY(swab)
- movl sp@(4),a0 | source
- movl sp@(8),a1 | destination
- movl sp@(12),d0 | count
- lsrl #1,d0 | count is in bytes; we need words
- beq swdone
-
-swloop:
- movw a0@+,d1
- rorw #8,d1
- movw d1,a1@+
- subql #1,d0
- bne swloop
-
-swdone:
+ movl sp@(12),d1 | #bytes
+ lsrl #1,d1 | -> #words
+ beq swab_end
+ subql #1,d1 | for proper dbf behaviour
+ movl sp@(4),a0 | src
+ movl sp@(8),a1 | and dst
+swab_loop:
+ movw a0@+,d0
+ rorw #8,d0
+ movw d0,a1@+
+ dbf d1,swab_loop
+swab_end:
rts
+