bc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static function optimiz...
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 11 Dec 2018 18:29:35 +0000 (19:29 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 11 Dec 2018 18:33:09 +0000 (19:33 +0100)
commit09d8df84ee908b940a31822c3480f36f817e4f09
tree0d0f74ee0ad31cea2f31090161ac22b457650f00
parent7f4daa4f5842b26c5f3e233819e583573eeebaf6
bc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static function optimizations

With direct calls, GCC no longer thinks that we take addresses of the functions,
and can use "more optimal" internal ABI for _all_ calls to these functions,
not only at this callsite. On i486, regparm is used, and:

function                                             old     new   delta
zbc_num_inv                                           56      57      +1
zbc_num_k                                            852     851      -1
zbc_program_modexp                                   558     556      -2
zbc_num_d                                            541     539      -2
bc_num_ulong2num                                      59      57      -2
zbc_program_num                                      840     836      -4
bc_num_zero                                           11       7      -4
bc_num_one                                            28      24      -4
bc_program_exec                                     3928    3918     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 1/-29)             Total: -28 bytes
   text    data     bss     dec     hex filename
 982237     485    7296  990018   f1b42 busybox_old
 982209     485    7296  989990   f1b26 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/bc.c