diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2015-07-22 17:50:44 +0200 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2015-07-22 19:31:17 +0200 |
commit | 77247cba3e8f94a3f58d16ec338ae030eb9145af (patch) | |
tree | cfefdbb4f31662df3c2b2b31d3ca68fe2c5dc566 | |
parent | 249a2737ba5d0a22f09f077b361d01d514eaf672 (diff) |
basic: more optimizable IN_SET macro
Making the array static allows gcc -O2 to generate smaller code:
"size systemd" before:
text data bss dec hex filename
1377286 128608 2632 1508526 1704ae systemd
After:
text data bss dec hex filename
1374326 128572 2664 1505562 16f91a systemd
(IN_SET still results in worse generated code than using
"x == FOO || x == BAR || ...". I don't think we'll be able to match
that with the C preprocessor.)
This change limits the use of IN_SET to sets with constant elements. All
present callers use constants. The compiler would report an "initializer
element is not constant" error otherwise.
-rw-r--r-- | src/basic/macro.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/basic/macro.h b/src/basic/macro.h index 8fae4d0ede..ea01d701d2 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -406,7 +406,7 @@ do { \ #define IN_SET(x, y, ...) \ ({ \ - const typeof(y) _array[] = { (y), __VA_ARGS__ }; \ + static const typeof(y) _array[] = { (y), __VA_ARGS__ }; \ const typeof(y) _x = (x); \ unsigned _i; \ bool _found = false; \ |