usr/src/lib/libc/amd64/gen/strlen.s
author Mark J. Nelson <Mark.J.Nelson@Sun.COM>
Wed, 06 Aug 2008 16:29:39 -0600
changeset 7298 b69e27387f74
parent 420 45e68e7aede3
child 10583 1058268e7f53
permissions -rw-r--r--
6733918 Teamware has retired, please welcome your new manager, Mercurial 4758439 some files use "current date" sccs keywords 6560843 asm sources should not rely on .file "%M%" for naming STT_FILE symbols 6560958 Solaris:: perl modules should not use SCCS keywords in version information 6729074 webrev doesn't deal well with remote ssh hg parents
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
	
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * Copyright (c) 2002 Advanced Micro Devices, Inc.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * Redistribution and  use in source and binary  forms, with or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * without  modification,  are   permitted  provided  that  the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * following conditions are met:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * + Redistributions  of source  code  must  retain  the  above
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 *   copyright  notice,   this  list  of   conditions  and  the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 *   following disclaimer.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * + Redistributions  in binary  form must reproduce  the above
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 *   copyright  notice,   this  list  of   conditions  and  the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 *   following  disclaimer in  the  documentation and/or  other
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
 *   materials provided with the distribution.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * + Neither the  name of Advanced Micro Devices,  Inc. nor the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 *   names  of  its contributors  may  be  used  to endorse  or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
 *   promote  products  derived   from  this  software  without
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
 *   specific prior written permission.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 * THIS  SOFTWARE  IS PROVIDED  BY  THE  COPYRIGHT HOLDERS  AND
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
 * CONTRIBUTORS AS IS AND  ANY EXPRESS OR IMPLIED WARRANTIES,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
 * INCLUDING,  BUT NOT  LIMITED TO,  THE IMPLIED  WARRANTIES OF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * MERCHANTABILITY  AND FITNESS  FOR A  PARTICULAR  PURPOSE ARE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 * DISCLAIMED.  IN  NO  EVENT  SHALL  ADVANCED  MICRO  DEVICES,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
 * INC.  OR CONTRIBUTORS  BE LIABLE  FOR ANY  DIRECT, INDIRECT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
 * INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
 * (INCLUDING,  BUT NOT LIMITED  TO, PROCUREMENT  OF SUBSTITUTE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * GOODS  OR  SERVICES;  LOSS  OF  USE, DATA,  OR  PROFITS;  OR
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 * BUSINESS INTERRUPTION)  HOWEVER CAUSED AND ON  ANY THEORY OF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 * LIABILITY,  WHETHER IN CONTRACT,  STRICT LIABILITY,  OR TORT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 * (INCLUDING NEGLIGENCE  OR OTHERWISE) ARISING IN  ANY WAY OUT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 * OF THE  USE  OF  THIS  SOFTWARE, EVEN  IF  ADVISED  OF  THE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * POSSIBILITY OF SUCH DAMAGE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 * 
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 * It is  licensee's responsibility  to comply with  any export
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * regulations applicable in licensee's jurisdiction.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
7298
b69e27387f74 6733918 Teamware has retired, please welcome your new manager, Mercurial
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 420
diff changeset
    48
	.file	"strlen.s"
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
#include "SYS.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#include "cache.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
#define LABEL(s) .strlen/**/s
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
	ENTRY(strlen)                /* (const char *s) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
        mov     %rdi, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
        neg     %rdi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
LABEL(aligntry):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
        mov     %rsi , %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
        and     $7, %r8d
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	jz	LABEL(alignafter)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
LABEL(align):                            /* 8-byte align */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
        sub     $8, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
LABEL(alignloop):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
        cmpb    $0, (%rsi)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
        je      LABEL(exit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
        inc     %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
        jnz     LABEL(alignloop)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
LABEL(alignafter):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
LABEL(56try):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
LABEL(56):                               /* 56-byte */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
        mov     (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
        mov     $0xfefefefefefefeff, %rcx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
LABEL(56loop):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
        jnc     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
        inc     %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
LABEL(56after):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
LABEL(32):                               /* 32-byte */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
        mov     _sref_(.amd64cache1), %r9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
LABEL(32loop):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
        sub     $32, %r9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
        lea     8 (%rsi), %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
        jbe     LABEL(32loop)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
LABEL(32after):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
LABEL(pretry):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
LABEL(pre):                              /* 64-byte prefetch */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
LABEL(preloop):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
        mov     %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
        add     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
        sbb     %rdx, %rdx
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
        xor     %rax, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
        or      %rcx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
        sub     %rdx, %r8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
        jnz     LABEL(tail)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
        prefetchnta 512 (%rsi)	/* 3DNow: use prefetch */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
        mov     8 (%rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
        add     $8, %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
        jmp     LABEL(preloop)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
LABEL(preafter):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
LABEL(tailtry):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
LABEL(tail):                             /* 4-byte tail */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
LABEL(tailloop):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
        test    %al, %al
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
        jz      LABEL(exit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
        inc     %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
        test    %ah, %ah
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
        jz      LABEL(exit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
        inc     %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
        test    $0x00ff0000, %eax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
        jz      LABEL(exit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
        inc     %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
        test    $0xff000000, %eax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
        jz      LABEL(exit)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
        inc     %rsi
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
        shr     $32, %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
        jmp     LABEL(tailloop)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
LABEL(tailafter):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
        .p2align 4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
LABEL(exit):
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
        lea     (%rdi, %rsi), %rax
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
        ret
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	SET_SIZE(strlen)