On Sun, Jun 05, 2005 at 08:32:17PM +0100, Dave Mitchell ([EMAIL PROTECTED]) wrote: > Some recent benchmarks indicated that removing all register keywords from > the perl core made things slower.
So here's the patch without the removal of register. xoxo, Andy -- Andy Lester => [EMAIL PROTECTED] => www.petdance.com => AIM:petdance
diff -ur /home/alester/bleadperl/util.c /home/alester/bw/trunk/util.c --- /home/alester/bleadperl/util.c 2005-06-03 04:01:34.000000000 -0500 +++ /home/alester/bw/trunk/util.c 2005-06-05 15:44:43.000000000 -0500 @@ -261,7 +261,6 @@ char * Perl_instr(pTHX_ register const char *big, register const char *little) { - register const char *s, *x; register I32 first; if (!little) @@ -270,15 +269,16 @@ if (!first) return (char*)big; while (*big) { + register const char *s, *x; if (*big++ != first) continue; for (x=big,s=little; *s; /**/ ) { if (!*x) return Nullch; - if (*s++ != *x++) { - s--; + if (*s != *x) break; - } + s++; + x++; } if (!*s) return (char*)(big-1); @@ -291,7 +291,6 @@ char * Perl_ninstr(pTHX_ register const char *big, register const char *bigend, const char *little, const char *lend) { - register const char *s, *x; register const I32 first = *little; register const char *littleend = lend; @@ -301,13 +300,14 @@ return Nullch; bigend -= littleend - little++; while (big <= bigend) { + register const char *s, *x; if (*big++ != first) continue; for (x=big,s=little; s < littleend; /**/ ) { - if (*s++ != *x++) { - s--; + if (*s != *x) break; - } + s++; + x++; } if (s >= littleend) return (char*)(big-1); @@ -321,7 +321,6 @@ Perl_rninstr(pTHX_ register const char *big, const char *bigend, const char *little, const char *lend) { register const char *bigbeg; - register const char *s, *x; register const I32 first = *little; register const char *littleend = lend; @@ -330,13 +329,14 @@ bigbeg = big; big = bigend - (littleend - little++); while (big >= bigbeg) { + register const char *s, *x; if (*big-- != first) continue; for (x=big+2,s=little; s < littleend; /**/ ) { - if (*s++ != *x++) { - s--; + if (*s != *x) break; - } + s++; + x++; } if (s >= littleend) return (char*)(big+1); @@ -384,13 +384,9 @@ if (len == 0) /* TAIL might be on a zero-length string. */ return; if (len > 2) { - U8 mlen; unsigned char *sb; + const U8 mlen = (len>255) ? 255 : (U8)len; - if (len > 255) - mlen = 255; - else - mlen = (U8)len; Sv_Grow(sv, len + 256 + FBM_TABLE_OFFSET); table = (unsigned char*)(SvPVX(sv) + len + FBM_TABLE_OFFSET); s = table - 1 - FBM_TABLE_OFFSET; /* last char */ @@ -443,7 +439,7 @@ { register unsigned char *s; STRLEN l; - register unsigned char *little = (unsigned char *)SvPV(littlestr,l); + register const unsigned char *little = (unsigned char *)SvPV(littlestr,l); register STRLEN littlelen = l; register const I32 multiline = flags & FBMrf_MULTILINE; @@ -491,8 +487,8 @@ /* This should be better than FBM if c1 == c2, and almost as good otherwise: maybe better since we do less indirection. And we save a lot of memory by caching no table. */ - register unsigned char c1 = little[0]; - register unsigned char c2 = little[1]; + const unsigned char c1 = little[0]; + const unsigned char c2 = little[1]; s = big + 1; bigend--; @@ -573,8 +569,8 @@ } { /* Do actual FBM. */ - register const unsigned char *table = little + littlelen + FBM_TABLE_OFFSET; - register unsigned char *oldlittle; + const unsigned char * const table = little + littlelen + FBM_TABLE_OFFSET; + register const unsigned char *oldlittle; if (littlelen > (STRLEN)(bigend - big)) return Nullch; @@ -594,7 +590,7 @@ goto check_end; } else { /* less expensive than calling strncmp() */ - register unsigned char *olds = s; + register unsigned char * const olds = s; tmp = littlelen; @@ -637,7 +633,6 @@ char * Perl_screaminstr(pTHX_ SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_posp, I32 last) { - register unsigned char *s, *x; register unsigned char *big; register I32 pos; register I32 previous; @@ -686,14 +681,15 @@ } big -= previous; do { + register unsigned char *s, *x; if (pos >= stop_pos) break; if (big[pos] != first) continue; for (x=big+pos+1,s=little; s < littleend; /**/ ) { - if (*s++ != *x++) { - s--; + if (*s != *x) break; - } + s++; + x++; } if (s == littleend) { *old_posp = pos; @@ -764,20 +760,15 @@ char * Perl_savepv(pTHX_ const char *pv) { - register char *newaddr; -#ifdef PERL_MALLOC_WRAP - STRLEN pvlen; -#endif if (!pv) return Nullch; + else { + char *newaddr; + const STRLEN pvlen = strlen(pv)+1; + New(902,newaddr,pvlen,char); + return strcpy(newaddr,pv); + } -#ifdef PERL_MALLOC_WRAP - pvlen = strlen(pv)+1; - New(902,newaddr,pvlen,char); -#else - New(902,newaddr,strlen(pv)+1,char); -#endif - return strcpy(newaddr,pv); } /* same thing but with a known length */ @@ -4065,7 +4056,7 @@ len = av_len((AV *)vs); if ( len == -1 ) { - Perl_sv_catpv(aTHX_ sv,"0"); + sv_catpvn(sv,"0",1); return sv; } digit = SvIVX(*av_fetch((AV *)vs, 0, 0)); @@ -4082,14 +4073,14 @@ if ( (int)PERL_ABS(digit) != 0 || len == 1 ) { if ( digit < 0 ) /* alpha version */ - Perl_sv_catpv(aTHX_ sv,"_"); + sv_catpvn(sv,"_",1); /* Don't display additional trailing zeros */ Perl_sv_catpvf(aTHX_ sv,"%03d", (int)PERL_ABS(digit)); } } else /* len == 0 */ { - Perl_sv_catpv(aTHX_ sv,"000"); + sv_catpvn(sv,"000",3); } return sv; } @@ -4118,7 +4109,7 @@ len = av_len((AV *)vs); if ( len == -1 ) { - Perl_sv_catpv(aTHX_ sv,""); + sv_catpvn(sv,"",0); return sv; } digit = SvIVX(*av_fetch((AV *)vs, 0, 0)); @@ -4134,7 +4125,7 @@ if ( len <= 2 ) { /* short version, must be at least three */ for ( len = 2 - len; len != 0; len-- ) - Perl_sv_catpv(aTHX_ sv,".0"); + sv_catpvn(sv,".0",2); } return sv;