+#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$
+ ;