small optimizations of toupper/tolower
No binary (build failed)
—
(log yok)
| @@ -2031,7 +2031,6 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |
| { | |
| #define tspl (G.exec_builtin__tspl) | |
| - | int (*to_xxx)(int); |
| var *tv; | |
| node *an[4]; | |
| var *av[4]; | |
| @@ -2061,7 +2060,8 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |
| if ((uint32_t)nargs < (info >> 30)) | |
| syntax_error(EMSG_TOO_FEW_ARGS); | |
| - | switch (info & OPNMASK) { |
| + | info &= OPNMASK; |
| + | switch (info) { |
| case B_a2: | |
| #if ENABLE_FEATURE_AWK_LIBM | |
| @@ -2126,15 +2126,12 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |
| break; | |
| case B_lo: | |
| - | to_xxx = tolower; |
| - | goto lo_cont; |
| - | |
| case B_up: | |
| - | to_xxx = toupper; |
| - | lo_cont: |
| s1 = s = xstrdup(as[0]); | |
| while (*s1) { | |
| - | *s1 = (*to_xxx)(*s1); |
| + | //*s1 = (info == B_up) ? toupper(*s1) : tolower(*s1); |
| + | if ((unsigned char)((*s1 | 0x20) - 'a') <= ('z' - 'a')) |
| + | *s1 = (info == B_up) ? (*s1 & 0xdf) : (*s1 | 0x20); |
| s1++; | |
| } | |
| setvar_p(res, s); | |
| @@ -1242,10 +1242,8 @@ int FAST_FUNC in_ib(const char *bufp, struct sockaddr *sap) | |
| c = *bufp++; | |
| if (isdigit(c)) | |
| val = c - '0'; | |
| - | else if (c >= 'a' && c <= 'f') |
| - | val = c - 'a' + 10; |
| - | else if (c >= 'A' && c <= 'F') |
| - | val = c - 'A' + 10; |
| + | else if ((c|0x20) >= 'a' && (c|0x20) <= 'f') |
| + | val = (c|0x20) - ('a' - 10); |
| else { | |
| errno = EINVAL; | |
| return -1; | |
| @@ -1254,17 +1252,15 @@ int FAST_FUNC in_ib(const char *bufp, struct sockaddr *sap) | |
| c = *bufp; | |
| if (isdigit(c)) | |
| val |= c - '0'; | |
| - | else if (c >= 'a' && c <= 'f') |
| - | val |= c - 'a' + 10; |
| - | else if (c >= 'A' && c <= 'F') |
| - | val |= c - 'A' + 10; |
| - | else if (c == ':' || c == 0) |
| + | else if ((c|0x20) >= 'a' && (c|0x20) <= 'f') |
| + | val |= (c|0x20) - ('a' - 10); |
| + | else if (c == ':' || c == '\0') |
| val >>= 4; | |
| else { | |
| errno = EINVAL; | |
| return -1; | |
| } | |
| - | if (c != 0) |
| + | if (c != '\0') |
| bufp++; | |
| *ptr++ = (unsigned char) (val & 0377); | |
| i++; | |