Third optimization, use short type, which is the smallest
functional int which requires 1. no unsigned -> signed
promotion, 2. fetches from a word aligned offset from
the lookup table, 3. is easily promoted to int upon the
function's return. This introduces a very small 2% speed
improvement in several cases.
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1747460 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/strings/apr_cstr.c b/strings/apr_cstr.c
index fb940c4..a79bf0f 100644
--- a/strings/apr_cstr.c
+++ b/strings/apr_cstr.c
@@ -196,7 +196,7 @@
* octets (such as extended latin alphabetics) are never case-folded.
* NOTE: Other than Alpha A-Z/a-z, each code point is unique!
*/
-static const unsigned char ucharmap[] = {
+static const short ucharmap[] = {
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
@@ -243,7 +243,7 @@
*
* NOTE: Other than Alpha A-Z/a-z, each code point is unique!
*/
-static const unsigned char ucharmap[] = {
+static const short ucharmap[] = {
0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F,
0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87,
@@ -283,9 +283,9 @@
{
for (;;)
{
- const int c1 = (int)(*((const unsigned char *)str1));
- const int c2 = (int)(*((const unsigned char *)str2));
- const int cmp = ucharmap[c1] - ucharmap[c2];
+ const short c1 = (short)(*((const unsigned char *)str1));
+ const short c2 = (short)(*((const unsigned char *)str2));
+ const short cmp = ucharmap[c1] - ucharmap[c2];
/* Not necessary to test for !c2, this is caught by cmp */
if (cmp || !c1)
return cmp;
@@ -298,9 +298,9 @@
{
while (n--)
{
- const int c1 = (int)(*((const unsigned char *)str1));
- const int c2 = (int)(*((const unsigned char *)str2));
- const int cmp = ucharmap[c1] - ucharmap[c2];
+ const short c1 = (short)(*((const unsigned char *)str1));
+ const short c2 = (short)(*((const unsigned char *)str2));
+ const short cmp = ucharmap[c1] - ucharmap[c2];
/* Not necessary to test for !c2, this is caught by cmp */
if (cmp || !c1)
return cmp;