From: Matthew Fernandez Date: Sun, 28 Feb 2021 06:03:43 +0000 (-0800) Subject: swap Strcmp calls for strcmp X-Git-Tag: 2.47.0~6^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f0bdbb1daaabe435e7088f8c4980a30d899879e;p=graphviz swap Strcmp calls for strcmp Strcmp optimized strcmp by unrolling the first iteration of a byte comparison loop. This is no longer an optimization. In modern compilers/libc, (1) strcmp is generally no longer a byte-by-byte comparison loop and (2) the compiler knows strcmp as a built-in and can do this kind of unrolling itself. As a result, the compiler actually has to do *more* work to reverse Strcmp back into strcmp and thus determine it can use, e.g., SIMD optimizations. This is essentially the next step of f5a326cb061866bb3beaa33c3e5169efe7fc134d. --- diff --git a/cmd/lefty/aix_mods/exec.c b/cmd/lefty/aix_mods/exec.c index 0f3fda126..cad42210d 100644 --- a/cmd/lefty/aix_mods/exec.c +++ b/cmd/lefty/aix_mods/exec.c @@ -836,7 +836,7 @@ static int orderop(Tobj v1o, Ctype_t op, Tobj v2o) } t1 = Tgettype(v1o), t2 = Tgettype(v2o); if (t1 == T_STRING && t2 == T_STRING) { - r = Strcmp(Tgetstring(v1o), Tgetstring(v2o)); + r = strcmp(Tgetstring(v1o), Tgetstring(v2o)); } else if (t1 == T_INTEGER && t2 == T_INTEGER) { i1 = Tgetinteger(v1o), i2 = Tgetinteger(v2o); r = (i1 == i2) ? 0 : ((i1 < i2) ? -1 : 1); diff --git a/cmd/lefty/aix_mods/tbl.c b/cmd/lefty/aix_mods/tbl.c index 341bf7bcd..5b99e0a82 100644 --- a/cmd/lefty/aix_mods/tbl.c +++ b/cmd/lefty/aix_mods/tbl.c @@ -24,7 +24,7 @@ Tobj Ttrue, Tfalse; #define ISEQRK(rk, ko) \ (T_ISNUMBER (ko) && Tgetnumber (ko) == (rk)) #define ISEQSK(sk, ko) \ - (T_ISSTRING (ko) && Strcmp (((Tstring_t *) (ko))->s, (sk)) == 0) + (T_ISSTRING (ko) && strcmp (((Tstring_t *) (ko))->s, (sk)) == 0) #define GETIKINDEX(tp, ik) (unsigned long) ik % tp->ln #define GETRKINDEX(tp, rk) (unsigned long) rk % tp->ln diff --git a/cmd/lefty/ws/gtk/garray.c b/cmd/lefty/ws/gtk/garray.c index 2eb2a25e1..fba5ee4b6 100644 --- a/cmd/lefty/ws/gtk/garray.c +++ b/cmd/lefty/ws/gtk/garray.c @@ -38,9 +38,9 @@ int GAcreatewidget(Gwidget_t * parent, Gwidget_t * widget, case G_ATTRBORDERWIDTH: break; case G_ATTRMODE: - if (Strcmp("horizontal", attrp[ai].u.t) == 0) { + if (strcmp("horizontal", attrp[ai].u.t) == 0) { WAU->mode = G_AWHARRAY; - } else if (Strcmp("vertical", attrp[ai].u.t) == 0) { + } else if (strcmp("vertical", attrp[ai].u.t) == 0) { WAU->mode = G_AWVARRAY; } else { Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t); @@ -48,9 +48,9 @@ int GAcreatewidget(Gwidget_t * parent, Gwidget_t * widget, } break; case G_ATTRLAYOUT: - if (Strcmp("on", attrp[ai].u.t) == 0) + if (strcmp("on", attrp[ai].u.t) == 0) Gawsetmode(widget, FALSE); - else if (Strcmp("off", attrp[ai].u.t) == 0) + else if (strcmp("off", attrp[ai].u.t) == 0) Gawsetmode(widget, TRUE); else { Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t); @@ -124,9 +124,9 @@ int GAsetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp) Gerr(POS, G_ERRCANNOTSETATTR2, "mode"); return -1; case G_ATTRLAYOUT: - if (Strcmp("on", attrp[ai].u.t) == 0) + if (strcmp("on", attrp[ai].u.t) == 0) Gawsetmode(widget, FALSE); - else if (Strcmp("off", attrp[ai].u.t) == 0) + else if (strcmp("off", attrp[ai].u.t) == 0) Gawsetmode(widget, TRUE); else { Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t); diff --git a/cmd/lefty/ws/gtk/gcanvas.c b/cmd/lefty/ws/gtk/gcanvas.c index 48e33e632..57f0b7516 100644 --- a/cmd/lefty/ws/gtk/gcanvas.c +++ b/cmd/lefty/ws/gtk/gcanvas.c @@ -107,7 +107,7 @@ int GCcreatewidget(Gwidget_t * parent, Gwidget_t * widget, break; #ifdef FEATURE_GMAP case G_ATTRMODE: - if (Strcmp("gmap", attrp[ai].u.t) == 0) { + if (strcmp("gmap", attrp[ai].u.t) == 0) { gmapmode = TRUE; } else { Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t); @@ -211,7 +211,7 @@ int GCcreatewidget(Gwidget_t * parent, Gwidget_t * widget, for (ai = 0; ai < attrn; ai++) { switch (attrp[ai].id) { case G_ATTRCURSOR: - if (Strcmp(attrp[ai].u.t, "default") == 0) { + if (strcmp(attrp[ai].u.t, "default") == 0) { curcursori = -1; } break; @@ -269,7 +269,7 @@ int GCsetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp) case G_ATTRBORDERWIDTH: break; case G_ATTRCURSOR: - if (Strcmp(attrp[ai].u.t, "watch") == 0) { + if (strcmp(attrp[ai].u.t, "watch") == 0) { gdk_window_set_cursor(widget->w->window, gdk_cursor_new(GDK_WATCH)); } else { @@ -651,7 +651,7 @@ static GdkFont *findfont(char *name, int size) sprintf(&Gbufp[0], name, size); for (fi = 0; fi < Gfontn; fi++) - if (Strcmp(&Gbufp[0], Gfontp[fi].name) == 0) + if (strcmp(&Gbufp[0], Gfontp[fi].name) == 0) return Gfontp[fi].font; if (!(font = gdk_font_load(&Gbufp[0]))) { diff --git a/cmd/lefty/ws/gtk/gquery.c b/cmd/lefty/ws/gtk/gquery.c index b21bc2705..6116c1c69 100644 --- a/cmd/lefty/ws/gtk/gquery.c +++ b/cmd/lefty/ws/gtk/gquery.c @@ -29,11 +29,11 @@ int GQcreatewidget(Gwidget_t * parent, Gwidget_t * widget, for (ai = 0; ai < attrn; ai++) { switch (attrp[ai].id) { case G_ATTRMODE: - if (Strcmp("string", attrp[ai].u.t) == 0) + if (strcmp("string", attrp[ai].u.t) == 0) WQU->mode = G_QWSTRING; - else if (Strcmp("file", attrp[ai].u.t) == 0) + else if (strcmp("file", attrp[ai].u.t) == 0) WQU->mode = G_QWFILE; - else if (Strcmp("choice", attrp[ai].u.t) == 0) + else if (strcmp("choice", attrp[ai].u.t) == 0) WQU->mode = G_QWCHOICE; else { Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);