linux/arch/blackfin/lib/strcmp.S
<<
>>
Prefs
   1/*
   2 * Copyright 2005-2010 Analog Devices Inc.
   3 *
   4 * Licensed under the Clear BSD license or the GPL-2 (or later)
   5 */
   6
   7#include <linux/linkage.h>
   8
   9/* void *strcmp(char *s1, const char *s2);
  10 * R0 = address (s1)
  11 * R1 = address (s2)
  12 *
  13 * Returns an integer less than, equal to, or greater than zero if s1
  14 *  (or the first n  bytes thereof) is found, respectively, to be less
  15 *  than, to match, or be greater than s2.
  16 */
  17
  18#ifdef CONFIG_STRCMP_L1
  19.section .l1.text
  20#else
  21.text
  22#endif
  23
  24.align 2
  25
  26ENTRY(_strcmp)
  27        P0 = R0 ;       /* s1 */
  28        P1 = R1 ;       /* s2 */
  29
  301:
  31        R0 = B[P0++] (Z);      /* get *s1 */
  32        R1 = B[P1++] (Z);      /* get *s2 */
  33        CC = R0 == R1;         /* compare a byte */
  34        if ! cc jump 2f;       /* not equal, break out */
  35        CC = R0;               /* at end of s1? */
  36        if cc jump 1b (bp);    /* no, keep going */
  37        jump.s 3f;             /* strings are equal */
  382:
  39        R0 = R0 - R1;          /* *s1 - *s2 */
  403:
  41        RTS;
  42
  43ENDPROC(_strcmp)
  44