root/arch/alpha/lib/strcat.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * arch/alpha/lib/strcat.S
   4  * Contributed by Richard Henderson (rth@tamu.edu)
   5  *
   6  * Append a null-terminated string from SRC to DST.
   7  */
   8 #include <asm/export.h>
   9 
  10         .text
  11 
  12         .align 3
  13         .globl strcat
  14         .ent strcat
  15 strcat:
  16         .frame $30, 0, $26
  17         .prologue 0
  18 
  19         mov     $16, $0         # set up return value
  20 
  21         /* Find the end of the string.  */
  22 
  23         ldq_u   $1, 0($16)      # load first quadword (a0 may be misaligned)
  24         lda     $2, -1
  25         insqh   $2, $16, $2
  26         andnot  $16, 7, $16
  27         or      $2, $1, $1
  28         cmpbge  $31, $1, $2     # bits set iff byte == 0
  29         bne     $2, $found
  30 
  31 $loop:  ldq     $1, 8($16)
  32         addq    $16, 8, $16
  33         cmpbge  $31, $1, $2
  34         beq     $2, $loop
  35 
  36 $found: negq    $2, $3          # clear all but least set bit
  37         and     $2, $3, $2
  38 
  39         and     $2, 0xf0, $3    # binary search for that set bit
  40         and     $2, 0xcc, $4
  41         and     $2, 0xaa, $5
  42         cmovne  $3, 4, $3
  43         cmovne  $4, 2, $4
  44         cmovne  $5, 1, $5
  45         addq    $3, $4, $3
  46         addq    $16, $5, $16
  47         addq    $16, $3, $16
  48 
  49         /* Now do the append.  */
  50 
  51         mov     $26, $23
  52         br      __stxcpy
  53 
  54         .end strcat
  55 EXPORT_SYMBOL(strcat);

/* [<][>][^][v][top][bottom][index][help] */