[BACK]Return to swab.S CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / arch / x86_64 / string

Annotation of src/lib/libc/arch/x86_64/string/swab.S, Revision 1.3

1.1       fvdl        1: /*
1.2       salo        2:  * Written by J.T. Conklin <jtc@NetBSD.org>.
1.1       fvdl        3:  * Public domain.
                      4:  */
                      5:
                      6: #include <machine/asm.h>
                      7:
                      8: #if defined(LIBC_SCCS)
1.3     ! rpaulo      9:        RCSID("$NetBSD: swab.S,v 1.2 2003/07/26 19:24:40 salo Exp $")
1.1       fvdl       10: #endif
                     11:
                     12: #define LOAD_SWAP_STORE_WORD \
                     13:        lodsw   ; \
                     14:        xchgb   %al,%ah ; \
                     15:        stosw
                     16:
                     17: ENTRY(swab)
                     18:        xchgq   %rdi,%rsi
                     19:        cld                             # set direction forward
                     20:
                     21:        shrq    $1,%rdx
                     22:        testq   $7,%rdx                 # copy first group of 1 to 7 words
1.3     ! rpaulo     23:        jz      L2                      # while swapping alternate bytes.
1.1       fvdl       24: L1:    lodsw
                     25:        rorw    $8,%ax
                     26:        stosw
                     27:        decq    %rdx
                     28:        testq   $7,%rdx
                     29:        jnz     L1
                     30:
                     31: L2:    shrq    $3,%rdx                 # copy remainder 8 words at a time
                     32:        jz      L4                      # while swapping alternate bytes.
                     33: L3:
                     34:        LOAD_SWAP_STORE_WORD
                     35:        LOAD_SWAP_STORE_WORD
                     36:        LOAD_SWAP_STORE_WORD
                     37:        LOAD_SWAP_STORE_WORD
                     38:        LOAD_SWAP_STORE_WORD
                     39:        LOAD_SWAP_STORE_WORD
                     40:        LOAD_SWAP_STORE_WORD
                     41:        LOAD_SWAP_STORE_WORD
                     42:
                     43:        decq    %rdx
                     44:        jnz     L3
                     45: L4:
                     46:        ret

CVSweb <webmaster@jp.NetBSD.org>