You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2022/01/16 00:45:34 UTC

svn commit: r1897106 - /httpd/httpd/trunk/server/util.c

Author: ylavic
Date: Sun Jan 16 00:45:34 2022
New Revision: 1897106

URL: http://svn.apache.org/viewvc?rev=1897106&view=rev
Log:
util: Follow up to r1897101 and r1897105: Yet better ap_cstr_casecmp[n]().

Now with a shorter epilogue.

Dump of assembler code for function ap_cstr_casecmp:
   0x0000000000049fd0 <+0>:	xor    %edx,%edx
   0x0000000000049fd2 <+2>:	lea    0x3d567(%rip),%r8        # 0x87540 <ucharmap>
   0x0000000000049fd9 <+9>:	nopl   0x0(%rax)
   0x0000000000049fe0 <+16>:	movzbl (%rsi,%rdx,1),%eax
   0x0000000000049fe4 <+20>:	movzbl (%r8,%rax,1),%ecx
   0x0000000000049fe9 <+25>:	movzbl (%rdi,%rdx,1),%eax
   0x0000000000049fed <+29>:	add    $0x1,%rdx
   0x0000000000049ff1 <+33>:	movzbl (%r8,%rax,1),%eax
   0x0000000000049ff6 <+38>:	sub    %ecx,%eax
   0x0000000000049ff8 <+40>:	jne    0x49ffe <ap_cstr_casecmp+46>
   0x0000000000049ffa <+42>:	test   %ecx,%ecx
   0x0000000000049ffc <+44>:	jne    0x49fe0 <ap_cstr_casecmp+16>
   0x0000000000049ffe <+46>:	ret    
End of assembler dump.


Modified:
    httpd/httpd/trunk/server/util.c

Modified: httpd/httpd/trunk/server/util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/util.c?rev=1897106&r1=1897105&r2=1897106&view=diff
==============================================================================
--- httpd/httpd/trunk/server/util.c (original)
+++ httpd/httpd/trunk/server/util.c Sun Jan 16 00:45:34 2022
@@ -3542,11 +3542,11 @@ AP_DECLARE(int) ap_cstr_casecmp(const ch
     const unsigned char *u1 = (const unsigned char *)s1;
     const unsigned char *u2 = (const unsigned char *)s2;
     for (;;) {
-        const int c1 = ucharmap[*u1++];
         const int c2 = ucharmap[*u2++];
-        /* Not necessary to test for !c2, this is caught by c1 == c2 */
-        if (c1 != c2 || !c1)
-            return c1 - c2;
+        const int cmp = (int)ucharmap[*u1++] - c2;
+        /* Not necessary to test for !c1, this is caught by cmp */
+        if (cmp || !c2)
+            return cmp;
     }
 }
 
@@ -3555,11 +3555,11 @@ AP_DECLARE(int) ap_cstr_casecmpn(const c
     const unsigned char *u1 = (const unsigned char *)s1;
     const unsigned char *u2 = (const unsigned char *)s2;
     while (n--) {
-        const int c1 = ucharmap[*u1++];
         const int c2 = ucharmap[*u2++];
-        /* Not necessary to test for !c2, this is caught by c1 == c2 */
-        if (c1 != c2 || !c1)
-            return c1 - c2;
+        const int cmp = (int)ucharmap[*u1++] - c2;
+        /* Not necessary to test for !c1, this is caught by cmp */
+        if (cmp || !c2)
+            return cmp;
     }
     return 0;
 }