summaryrefslogtreecommitdiff
path: root/pptok.pl
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2007-09-12 17:02:55 +0000
committerH. Peter Anvin <hpa@zytor.com>2007-09-12 17:02:55 +0000
commit7978feebd2fb0be9f4a37980090dfebeeb29a36d (patch)
tree0d0e5847db53f2d0b8ed4bbca8e312835514e6a2 /pptok.pl
parentff6e9b469982f5db9675316c840db053dfa5328c (diff)
downloadnasm-7978feebd2fb0be9f4a37980090dfebeeb29a36d.tar.gz
pptok.c: quick-and-dirty downcasing during prehashing
Speed up pptok.c by just doing |= 0x20 instead of calling tolower() for every character during prehashing. This is good enough for our needs, since we don't have any tokens containing the characters @ [ \ ] _ nor any high-bit characters (in which case we'd have to worry about multibyte anyway.)
Diffstat (limited to 'pptok.pl')
-rwxr-xr-xpptok.pl8
1 files changed, 7 insertions, 1 deletions
diff --git a/pptok.pl b/pptok.pl
index 99efc38b..537705c0 100755
--- a/pptok.pl
+++ b/pptok.pl
@@ -115,6 +115,12 @@ if ($what eq 'c') {
foreach $pt (@pptok) {
if (defined($pt)) {
$tokens{'%'.$pt} = $n;
+ if ($pt =~ /[\@\[\]\\_]/) {
+ # Fail on characters which look like upper-case letters
+ # to the quick-and-dirty downcasing in the prehash
+ # (see below)
+ die "$in: invalid character in token: $pt";
+ }
}
$n++;
}
@@ -183,7 +189,7 @@ if ($what eq 'c') {
print OUT "\n";
print OUT " while ((c = *p++) != 0) {\n";
- print OUT " c = tolower(c);\n";
+ print OUT " c |= 0x20; /* convert to lower case */\n";
printf OUT " uint32_t kn1 = rot(k1,%2d) - rot(k2,%2d) + c;\n", ${$sv}[0], ${$sv}[1];
printf OUT " uint32_t kn2 = rot(k2,%2d) - rot(k1,%2d) + c;\n", ${$sv}[2], ${$sv}[3];
print OUT " k1 = kn1; k2 = kn2;\n";