OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.17.0/] [newlib/] [libc/] [machine/] [mips/] [strlen.c] - Blame information for rev 158

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
/*
2
 * strlen.c -- strlen function.  On at least some MIPS chips, a simple
3
 * strlen is faster than the 'optimized' C version.
4
 *
5
 * Copyright (c) 2001, 2002 Red Hat, Inc.
6
 *
7
 * The authors hereby grant permission to use, copy, modify, distribute,
8
 * and license this software and its documentation for any purpose, provided
9
 * that existing copyright notices are retained in all copies and that this
10
 * notice is included verbatim in any distributions. No written agreement,
11
 * license, or royalty fee is required for any of the authorized uses.
12
 * Modifications to this software may be copyrighted by their authors
13
 * and need not follow the licensing terms described here, provided that
14
 * the new terms are clearly indicated on the first page of each file where
15
 * they apply.
16
 */
17
 
18
#include <stddef.h>
19
#include <string.h>
20
 
21
/* MIPS16 needs to come first.  */
22
 
23
#if defined(__mips16)
24
size_t
25
strlen (const char *str)
26
{
27
  const char *start = str;
28
 
29
  while (*str++ != '\0')
30
    ;
31
 
32
  return str - start - 1;
33
}
34
#elif defined(__mips64)
35
__asm__(""                      /* 64-bit MIPS targets */
36
        "       .set    noreorder\n"
37
        "       .set    nomacro\n"
38
        "       .globl  strlen\n"
39
        "       .ent    strlen\n"
40
        "strlen:\n"
41
        "       daddiu  $2,$4,1\n"
42
        "\n"
43
        "1:     lbu     $3,0($4)\n"
44
        "       bnez    $3,1b\n"
45
        "       daddiu  $4,$4,1\n"
46
        "\n"
47
        "       jr      $31\n"
48
        "       dsubu   $2,$4,$2\n"
49
        "       .end    strlen\n"
50
        "       .set    macro\n"
51
        "       .set    reorder\n");
52
 
53
#else
54
__asm__(""                      /* 32-bit MIPS targets */
55
        "       .set    noreorder\n"
56
        "       .set    nomacro\n"
57
        "       .globl  strlen\n"
58
        "       .ent    strlen\n"
59
        "strlen:\n"
60
        "       addiu   $2,$4,1\n"
61
        "\n"
62
        "1:     lbu     $3,0($4)\n"
63
        "       bnez    $3,1b\n"
64
        "       addiu   $4,$4,1\n"
65
        "\n"
66
        "       jr      $31\n"
67
        "       subu    $2,$4,$2\n"
68
        "       .end    strlen\n"
69
        "       .set    macro\n"
70
        "       .set    reorder\n");
71
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.