diff options
author | Nathan Bossart <nathan@postgresql.org> | 2024-04-02 10:16:00 -0500 |
---|---|---|
committer | Nathan Bossart <nathan@postgresql.org> | 2024-04-02 10:16:00 -0500 |
commit | 6687430c98f3bed1d4c5f85f05a230b0d4581a66 (patch) | |
tree | 1f9284e431f597c0dd1170baad885488d2eae60e /src/port/pg_bitutils.c | |
parent | 38698dd38e56b6de31545ac284e36feb00d413cb (diff) | |
download | postgresql-6687430c98f3bed1d4c5f85f05a230b0d4581a66.tar.gz postgresql-6687430c98f3bed1d4c5f85f05a230b0d4581a66.zip |
Refactor code for setting pg_popcount* function pointers.
Presently, there are three copies of this code, and a proposed
follow-up patch would add more code to each copy. This commit
introduces a new inline function for this code and makes use of it
in the pg_popcount*_choose functions, thereby reducing code
duplication.
Author: Paul Amonson
Discussion: https://postgr.es/m/BL1PR11MB5304097DF7EA81D04C33F3D1DCA6A%40BL1PR11MB5304.namprd11.prod.outlook.com
Diffstat (limited to 'src/port/pg_bitutils.c')
-rw-r--r-- | src/port/pg_bitutils.c | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c index 1197696e97c..28312f3dd95 100644 --- a/src/port/pg_bitutils.c +++ b/src/port/pg_bitutils.c @@ -148,8 +148,8 @@ pg_popcount_available(void) * the function pointers so that subsequent calls are routed directly to * the chosen implementation. */ -static int -pg_popcount32_choose(uint32 word) +static inline void +choose_popcount_functions(void) { if (pg_popcount_available()) { @@ -163,45 +163,26 @@ pg_popcount32_choose(uint32 word) pg_popcount64 = pg_popcount64_slow; pg_popcount = pg_popcount_slow; } +} +static int +pg_popcount32_choose(uint32 word) +{ + choose_popcount_functions(); return pg_popcount32(word); } static int pg_popcount64_choose(uint64 word) { - if (pg_popcount_available()) - { - pg_popcount32 = pg_popcount32_fast; - pg_popcount64 = pg_popcount64_fast; - pg_popcount = pg_popcount_fast; - } - else - { - pg_popcount32 = pg_popcount32_slow; - pg_popcount64 = pg_popcount64_slow; - pg_popcount = pg_popcount_slow; - } - + choose_popcount_functions(); return pg_popcount64(word); } static uint64 pg_popcount_choose(const char *buf, int bytes) { - if (pg_popcount_available()) - { - pg_popcount32 = pg_popcount32_fast; - pg_popcount64 = pg_popcount64_fast; - pg_popcount = pg_popcount_fast; - } - else - { - pg_popcount32 = pg_popcount32_slow; - pg_popcount64 = pg_popcount64_slow; - pg_popcount = pg_popcount_slow; - } - + choose_popcount_functions(); return pg_popcount(buf, bytes); } |