]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
OPTIM: halog: improve field parser speed for modern compilers
authorWilly Tarreau <w@1wt.eu>
Mon, 8 Nov 2021 08:58:22 +0000 (09:58 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 8 Nov 2021 11:08:26 +0000 (12:08 +0100)
Modern compilers were producing producing less efficient code in the
field_start() loop, by not emitting two conditional jumps for a single
test. However by reordering the test we can merge the optimal case and
the default one and get back to good performance so let's simplify the
test. This improves the parsing speed by 5%.

admin/halog/halog.c

index 79eff91453d67c225aeb0b9fd38c3946306b3e9e..5c0218b817f0a2316a5c9ce3b510a86d134967d8 100644 (file)
@@ -265,12 +265,10 @@ const char *field_start(const char *p, int field)
                /* skip spaces */
                while (1) {
                        c = *(p++);
-                       if (c > ' ')
-                               break;
-                       if (c == ' ')
-                               continue;
                        if (!c) /* end of line */
                                return p-1;
+                       if (c == ' ')
+                               continue;
                        /* other char => new field */
                        break;
                }
@@ -283,12 +281,10 @@ const char *field_start(const char *p, int field)
                /* skip this field */
                while (1) {
                        c = *(p++);
-                       if (c == ' ')
-                               break;
-                       if (c > ' ')
-                               continue;
                        if (c == '\0')
                                return p - 1;
+                       if (c == ' ')
+                               break;
                }
        }
 #else