* fixed GCC 4.4.0 mingw compilation:
[fw/sdcc] / device / lib / _strlen.c
index d9c546cc5435fa6daf2428e52ae79cb85732706d..e2cbf4280475cc2d32eca004cd93361f74ff89b5 100644 (file)
@@ -1,35 +1,79 @@
 /*-------------------------------------------------------------------------
 /*-------------------------------------------------------------------------
-  _strcpy.c - part of string library functions
+  _strlen.c - part of string library functions
 
              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
 
              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
+                           mcs51 assembler by Frieder Ferlemann (2007)
 
    This library is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published by the
    Free Software Foundation; either version 2, or (at your option) any
    later version.
 
    This library is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published by the
    Free Software Foundation; either version 2, or (at your option) any
    later version.
-   
+
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Library General Public License for more details.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Library General Public License for more details.
-   
+
    You should have received a copy of the GNU Library General Public License
    along with this program; if not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    You should have received a copy of the GNU Library General Public License
    along with this program; if not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-   
+
    In other words, you are welcome to use, share and improve this program.
    You are forbidden to forbid anyone else to use, share and improve
    In other words, you are welcome to use, share and improve this program.
    You are forbidden to forbid anyone else to use, share and improve
-   what you give them.   Help stamp out software-hoarding!  
+   what you give them.   Help stamp out software-hoarding!
 -------------------------------------------------------------------------*/
 -------------------------------------------------------------------------*/
-#include "string.h" 
-#define NULL (void *)0
 
 
-int strlen ( char * str ) 
-{
-       register int i = 0 ;
+#if (!defined (SDCC_mcs51))
+
+  /* Generic routine first */
+  int strlen ( char * str )
+  {
+    register int i = 0 ;
+
+    while (*str++)
+      i++ ;
+
+    return i;
+  }
+
+#else
+
+  /* Assembler version for mcs51 */
+  int strlen ( char * str ) __naked
+  {
+    str;     /* hush the compiler */
+
+    __asm
+      ; dptr holds pointer
+      ; b holds pointer memspace
+      ;
+
+      ; char *ptr = str:
+      mov     r2,dpl
+      mov     r3,dph
+      ;
+
+      ; while ( *ptr ) ptr++;
+    L00101$:
+      lcall   __gptrget
+      jz      L00102$
+      inc     dptr
+      sjmp    L00101$
+      ;
 
 
-       while (*str++) 
-               i++ ;
+    L00102$:
+      ; return ptr - str;
+      clr     c
+      mov     a,dpl
+      subb    a,r2
+      mov     dpl,a
+      ;
+      mov     a,dph
+      subb    a,r3
+      mov     dph,a
+      ;
+      ret
+    __endasm;
+  }
 
 
-       return i;
-}
+#endif