Commit Graph

1251 Commits

Author SHA1 Message Date
Denys Vlasenko
c0ef23ca40 bc: remove parse function pointer
function                                             old     new   delta
zbc_program_asciify                                    -     372    +372
zcommon_parse                                          -     341    +341
zbc_program_printStream                                -     141    +141
zbc_program_pushArray                                  -     111    +111
zbc_program_nquit                                      -      92     +92
zbc_vm_process                                        61      63      +2
zbc_parse_text                                       122     123      +1
bc_vm_run                                            591     592      +1
zdc_parse_mem                                        108     107      -1
zbc_parse_operator                                   175     174      -1
zbc_parse_else                                       133     132      -1
zbc_parse_body                                       104     103      -1
zbc_program_read                                     261     259      -2
zdc_parse_register                                    40      37      -3
zbc_parse_string                                     100      97      -3
zbc_parse_endBody                                    343     339      -4
zdc_parse_expr                                       688     680      -8
zbc_parse_auto                                       198     188     -10
zbc_parse_name                                       414     401     -13
common_parse_init                                     45      31     -14
zdc_parse_parse                                       23       -     -23
bc_parse_create                                      158     131     -27
zbc_parse_stmt                                      1540    1502     -38
bc_parse_expr_empty_ok                              1882    1840     -42
zbc_program_exec                                    3963    3837    -126
zbc_parse_parse                                      311       -    -311
zbc_program_modexp                                   556       -    -556
------------------------------------------------------------------------------
(add/remove: 5/3 grow/shrink: 3/16 up/down: 1061/-1184)      Total: -123 bytes
   text	   data	    bss	    dec	    hex	filename
 980757	    485	   7296	 988538	  f157a	busybox_old
 980634	    485	   7296	 988415	  f14ff	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 23:03:10 +01:00
Denys Vlasenko
19f110751d bc: convert two more functions to "z" logic
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 22:48:19 +01:00
Denys Vlasenko
8a89247e0a bc: remove BC_STATUS_EOF (again), the condition is detectable as len==0
function                                             old     new   delta
bc_read_line                                         147     129     -18
bc_vm_run                                            618     591     -27
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-45)             Total: -45 bytes
   text	   data	    bss	    dec	    hex	filename
 980802	    485	   7296	 988583	  f15a7	busybox_old
 980757	    485	   7296	 988538	  f157a	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 22:43:58 +01:00
Denys Vlasenko
d8078a79be dc: fix EOF handling in case of last line being incomplete
This wasn't working correctly:

$ echo -ne '10 20+p' | dc
30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 21:56:06 +01:00
Denys Vlasenko
d6ad3666dc bc: further conversions to "z" logic
function                                             old     new   delta
bc_program_exec                                     3876       -   -3876
zbc_program_exec                                       -    3963   +3963
bc_program_execStr                                   429       -    -429
zbc_program_execStr                                    -     427    +427
bc_vm_file                                           197       -    -197
zbc_vm_file                                            -     187    +187
bc_vm_process                                         74       -     -74
zbc_vm_process                                         -      61     +61
bc_parse_pushIndex                                    66      68      +2
bc_vm_run                                            624     618      -6
dc_main                                              187     176     -11
bc_program_reset                                      64       -     -64
zbc_program_pushArray                                111       -    -111
------------------------------------------------------------------------------
(add/remove: 4/6 grow/shrink: 1/2 up/down: 4640/-4768)       Total: -128 bytes
   text	   data	    bss	    dec	    hex	filename
 980922	    485	   7296	 988703	  f161f	busybox_old
 980794	    485	   7296	 988575	  f159f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 21:39:10 +01:00
Denys Vlasenko
c2da68e896 bc: optimize bc_parse_pushIndex()
function                                             old     new   delta
bc_parse_pushIndex                                    80      68     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 16:44:34 +01:00
Denys Vlasenko
26819db9a3 bc: convert even more of lexer functions to "z" convention
function                                             old     new   delta
bc_parse_name                                        416       -    -416
zbc_parse_name                                         -     414    +414
bc_parse_parse                                       305       -    -305
zbc_parse_parse                                        -     311    +311
bc_program_read                                      271       -    -271
zbc_program_read                                       -     261    +261
bc_parse_text                                        129       -    -129
zbc_parse_text                                         -     122    +122
dc_parse_parse                                        26       -     -26
zdc_parse_parse                                        -      23     +23
bc_program_index                                      66      64      -2
bc_vm_process                                         92      74     -18
bc_program_execStr                                   460     429     -31
bc_parse_expr_empty_ok                              1939    1882     -57
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 0/4 up/down: 1131/-1255)       Total: -124 bytes
   text	   data	    bss	    dec	    hex	filename
 981058	    485	   7296	 988839	  f16a7	busybox_old
 980934	    485	   7296	 988715	  f162b	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 16:09:47 +01:00
Denys Vlasenko
ae0faf91d0 bc: convert even more of lexer functions to "z" convention
function                                             old     new   delta
bc_parse_stmt                                       1594       -   -1594
zbc_parse_stmt                                         -    1540   +1540
common_parse_expr                                     43       -     -43
zcommon_parse_expr                                     -      40     +40
bc_parse_expr                                         24       -     -24
zbc_parse_expr                                         -      24     +24
zbc_parse_body                                       108     104      -4
bc_program_read                                      277     271      -6
bc_program_execStr                                   468     460      -8
bc_parse_expr_empty_ok                              1955    1939     -16
bc_parse_name                                        451     416     -35
bc_parse_parse                                       476     305    -171
------------------------------------------------------------------------------
(add/remove: 3/3 grow/shrink: 0/6 up/down: 1604/-1901)       Total: -297 bytes
   text	   data	    bss	    dec	    hex	filename
 981355	    485	   7296	 989136	  f17d0	busybox_old
 981058	    485	   7296	 988839	  f16a7	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 15:19:54 +01:00
Denys Vlasenko
8cd468f604 bc: convert more of lexer functions to "z" convention
function                                             old     new   delta
dc_parse_expr                                        748       -    -748
zdc_parse_expr                                         -     688    +688
bc_parse_endBody                                     338       -    -338
zbc_parse_endBody                                      -     343    +343
bc_parse_auto                                        201       -    -201
zbc_parse_auto                                         -     198    +198
dc_parse_mem                                         115       -    -115
zdc_parse_mem                                          -     108    +108
bc_parse_body                                        116       -    -116
zbc_parse_body                                         -     108    +108
bc_parse_string                                      102       -    -102
zbc_parse_string                                       -     100    +100
dc_parse_register                                     43       -     -43
zdc_parse_register                                     -      40     +40
common_parse_expr                                     40      43      +3
bc_parse_parse                                       321     476    +155
bc_parse_stmt                                       1598    1594      -4
dc_parse_parse                                        44      26     -18
bc_parse_reset                                       153       -    -153
------------------------------------------------------------------------------
(add/remove: 7/8 grow/shrink: 2/2 up/down: 1743/-1838)        Total: -95 bytes
   text	   data	    bss	    dec	    hex	filename
 981450	    485	   7296	 989231	  f182f	busybox_old
 981355	    485	   7296	 989136	  f17d0	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 14:57:15 +01:00
Denys Vlasenko
9a34e89289 bc: partially convert lexer functions to "z" convention
function                                             old     new   delta
bc_lex_token                                        1228       -   -1228
zbc_lex_token                                          -    1193   +1193
dc_lex_token                                         674       -    -674
zdc_lex_token                                          -     672    +672
bc_parse_operator                                    177       -    -177
zbc_parse_operator                                     -     175    +175
bc_parse_else                                        133       -    -133
zbc_parse_else                                         -     133    +133
bc_lex_next                                           91       -     -91
zbc_lex_next                                           -      81     +81
dc_parse_expr                                        744     748      +4
bc_parse_string                                      100     102      +2
bc_parse_body                                        114     116      +2
dc_parse_mem                                         116     115      -1
bc_parse_text                                        130     129      -1
dc_parse_register                                     51      43      -8
bc_parse_endBody                                     358     338     -20
bc_parse_name                                        513     451     -62
bc_parse_auto                                        265     201     -64
bc_parse_expr_empty_ok                              2032    1955     -77
bc_parse_parse                                       417     321     -96
bc_parse_stmt                                       1753    1598    -155
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 3/9 up/down: 2262/-2787)       Total: -525 bytes
   text	   data	    bss	    dec	    hex	filename
 981975	    485	   7296	 989756	  f1a3c	busybox_old
 981450	    485	   7296	 989231	  f182f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 13:58:55 +01:00
Denys Vlasenko
251fbb57be bc: code shrink in bc_num_cmp()
function                                             old     new   delta
bc_num_cmp                                           275     231     -44

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 11:51:32 +01:00
Denys Vlasenko
16494f557f bc: simplify zbc_program_logical()
function                                             old     new   delta
bc_program_exec                                     3918    3876     -42
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-42)             Total: -42 bytes
   text	   data	    bss	    dec	    hex	filename
 982061	    485	   7296	 989842	  f1a92	busybox_old
 982019	    485	   7296	 989800	  f1a68	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 00:51:53 +01:00
Denys Vlasenko
69171dc466 bc: simplify nested read() check
function                                             old     new   delta
bc_vm_run                                            622     624      +2
dc_main                                              186     187      +1
bc_main                                               72      73      +1
bc_program_read                                      312     277     -35
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 4/-35)             Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 00:29:24 +01:00
Denys Vlasenko
12b9eaf787 bc: in non-interactive config, POSIX error functions never return nonzero
function                                             old     new   delta
bc_parse_expr_empty_ok                              2036    2032      -4
bc_parse_stmt                                       1767    1753     -14
bc_lex_token                                        1259    1228     -31
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-49)             Total: -49 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 23:50:14 +01:00
Denys Vlasenko
f0f069b08f bc: use common_parse_init() in bc_vm_init()
function                                             old     new   delta
common_parse_init                                     26      45     +19
dc_parse_init                                         17       -     -17
bc_parse_init                                         17       -     -17
bc_vm_init                                           744     725     -19
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 1/1 up/down: 19/-53)            Total: -34 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 23:22:52 +01:00
Denys Vlasenko
4dd3652c2f bc: fix EOF handling in bc_program_read()
$ bc -q
read()
2^D^D2
     ^ prints the result of read()'ed expression

function                                             old     new   delta
zbc_program_print                                    629     642     +13
bc_program_read                                      322     312     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 13/-10)              Total: 3 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 22:45:15 +01:00
Denys Vlasenko
2c6f563216 bc: tweak comment
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 21:21:14 +01:00
Denys Vlasenko
c008a73762 bc: convert bc_program_asciify to "z" function
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 20:57:53 +01:00
Denys Vlasenko
9f657e0f7d bc: shrink bc_program_printString
function                                             old     new   delta
zbc_program_print                                    665     642     -23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:52:25 +01:00
Denys Vlasenko
259137d0f0 bc: convert zbc_program_op to "z" function, fix a thinko in prev commits
function                                             old     new   delta
zbc_program_assign                                   448     447      -1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:44:14 +01:00
Denys Vlasenko
728e7c9ecb bc: convert bc_program_logical to "z" function
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:37:00 +01:00
Denys Vlasenko
09d8df84ee 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>
2018-12-11 19:33:09 +01:00
Denys Vlasenko
7f4daa4f58 bc: convert arithmetic calc functions to "z" logic
In order for magic macros to work, a bit of reordering was necessary.

function                                             old     new   delta
zbc_program_modexp                                     -     558    +558
zbc_program_assign                                     -     448    +448
zbc_program_pushArray                                  -     111    +111
zbc_num_s                                            239     237      -2
zbc_num_d                                            543     541      -2
zbc_num_binary                                       145     143      -2
zbc_num_a                                            443     441      -2
zbc_num_rem                                           95      91      -4
zbc_num_divmod                                       150     146      -4
zbc_num_m                                            269     257     -12
zbc_num_r                                            230     208     -22
zbc_num_printNum                                     447     417     -30
bc_program_exec                                     3960    3928     -32
zbc_num_p                                            434     399     -35
zbc_program_num                                      880     840     -40
zbc_num_k                                            913     852     -61
zbc_program_printStream                              141       -    -141
bc_program_assign                                    455       -    -455
bc_program_modexp                                    668       -    -668
------------------------------------------------------------------------------
(add/remove: 3/3 grow/shrink: 0/13 up/down: 1117/-1512)      Total: -395 bytes
   text	   data	    bss	    dec	    hex	filename
 982632	    485	   7296	 990413	  f1ccd	busybox_old
 982237	    485	   7296	 990018	  f1b42	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:22:04 +01:00
Denys Vlasenko
1aeacefbb3 bc: rename arithmetic calc functions to "z" functions, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:12:13 +01:00
Denys Vlasenko
c2d15dff42 bc: move declarations around, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 17:56:09 +01:00
Denys Vlasenko
c355c4a7d6 bc: code shrink in zbc_lex_number()
function                                             old     new   delta
zbc_lex_number                                       279     190     -89

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 17:36:21 +01:00
Denys Vlasenko
b402ff844c bc: make bc_program_pushVar "z-function"
function                                             old     new   delta
bc_program_pushVar                                   200     198      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 15:45:15 +01:00
Denys Vlasenko
2930123279 bc: improve "noninteractive" macro machinery so that even "return zero" code is not generated
Most affected functions shrink by 2 bytes on x86.

function                                             old     new   delta
zbc_program_num                                        -     880    +880
zbc_program_print                                      -     665    +665
zbc_num_printNum                                       -     447    +447
zbc_program_call                                       -     323    +323
zbc_program_copyToVar                                  -     287    +287
zbc_lex_number                                         -     279    +279
zbc_program_binOpPrep                                  -     269    +269
zbc_program_assignStr                                  -     142    +142
zbc_program_printStream                                -     141    +141
zbc_func_insert                                        -      93     +93
zbc_num_ulong                                          -      88     +88
zbc_program_prep                                       -      79     +79
zbc_num_shift                                          -      53     +53
bc_num_shift                                          54       -     -54
bc_program_prep                                       81       -     -81
bc_num_ulong                                          90       -     -90
bc_func_insert                                        95       -     -95
bc_program_printStream                               143       -    -143
bc_program_assignStr                                 144       -    -144
bc_program_binOpPrep                                 271       -    -271
bc_lex_number                                        281       -    -281
bc_program_copyToVar                                 289       -    -289
bc_program_call                                      325       -    -325
bc_num_printNum                                      471       -    -471
bc_program_print                                     667       -    -667
bc_program_num                                       880       -    -880
------------------------------------------------------------------------------
(add/remove: 13/13 grow/shrink: 0/0 up/down: 3746/-3791)      Total: -45 bytes
   text	   data	    bss	    dec	    hex	filename
 982779	    485	   7296	 990560	  f1d60	busybox_old
 982734	    485	   7296	 990515	  f1d33	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 15:29:32 +01:00
Denys Vlasenko
91cde95916 bc: it's not clear bc_vm_file() always exits on errors, remove ERRORS_ARE_FATAL
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:56:44 +01:00
Denys Vlasenko
628bf1bc63 bc: more ERRORS_ARE_FATAL annotations
function                                             old     new   delta
bc_program_exec                                     3920    3969     +49
bc_program_call                                      329     325      -4
bc_vm_run                                            622     616      -6
bc_program_modexp                                    677     668      -9
bc_program_assign                                    471     455     -16
bc_program_pushArray                                 113       -    -113
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/4 up/down: 49/-148)           Total: -99 bytes
   text	   data	    bss	    dec	    hex	filename
 982872	    485	   7296	 990653	  f1dbd	busybox_old
 982773	    485	   7296	 990554	  f1d5a	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:41:05 +01:00
Denys Vlasenko
88cfea6a81 bc: stop checking for name length in bc_lex_name()
Gigabyte-long names are not a practical concern.

function                                             old     new   delta
bc_lex_name                                           73      69      -4
bc_lex_token                                        1266    1259      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-11)             Total: -11 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:26:04 +01:00
Denys Vlasenko
fa35e598ab bc: optimize non-interactive config: we know that many functions always succeed
function                                             old     new   delta
bc_program_assign                                    475     471      -4
bc_program_prep                                       87      81      -6
bc_parse_parse                                       423     417      -6
bc_num_p                                             440     434      -6
bc_program_printStream                               153     143     -10
bc_program_execStr                                   478     468     -10
bc_parse_auto                                        275     265     -10
bc_num_k                                             925     913     -12
bc_program_copyToVar                                 307     289     -18
bc_program_binOpPrep                                 289     271     -18
bc_num_printNum                                      489     471     -18
bc_num_m                                             287     269     -18
bc_program_pushArray                                 139     113     -26
bc_program_modexp                                    707     677     -30
bc_program_print                                     704     667     -37
bc_program_exec                                     4010    3920     -90
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/16 up/down: 0/-319)          Total: -319 bytes
   text	   data	    bss	    dec	    hex	filename
 983202	    485	   7296	 990983	  f1f07	busybox_old
 982883	    485	   7296	 990664	  f1dc8	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:17:24 +01:00
Denys Vlasenko
86e63cdeca bc: in non-interactive config, let compiler know that error funcs do not return
function                                             old     new   delta
bc_num_s                                             235     239      +4
bc_lex_next                                           92      91      -1
dc_parse_register                                     53      51      -2
dc_parse_parse                                        46      44      -2
bc_vm_run                                            624     622      -2
bc_program_assignStr                                 146     144      -2
bc_parse_else                                        135     133      -2
bc_parse_body                                        116     114      -2
bc_num_a                                             445     443      -2
bc_func_insert                                        97      95      -2
bc_program_pushVar                                   203     200      -3
bc_parse_text                                        133     130      -3
bc_error_bad_character                                17      14      -3
bc_error                                              14      11      -3
bc_program_printStream                               157     153      -4
bc_program_prep                                       91      87      -4
bc_program_copyToVar                                 311     307      -4
bc_num_ulong                                          95      90      -5
bc_num_p                                             445     440      -5
bc_program_print                                     711     704      -7
bc_parse_endBody                                     365     358      -7
bc_num_r                                             237     230      -7
bc_num_d                                             550     543      -7
dc_lex_token                                         682     674      -8
bc_program_pushArray                                 147     139      -8
bc_program_assign                                    485     475     -10
bc_program_read                                      333     322     -11
bc_lex_token                                        1278    1266     -12
bc_parse_stmt                                       1780    1767     -13
bc_program_modexp                                    723     707     -16
dc_parse_expr                                        762     744     -18
bc_program_execStr                                   496     478     -18
bc_program_call                                      347     329     -18
bc_vm_file                                           219     197     -22
bc_program_binOpPrep                                 311     289     -22
bc_parse_name                                        539     513     -26
bc_parse_parse                                       451     423     -28
bc_program_num                                       912     880     -32
bc_read_line                                         172     139     -33
bc_program_exec                                     4048    4010     -38
bc_parse_auto                                        313     275     -38
bc_parse_expr_empty_ok                              2095    2036     -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/41 up/down: 4/-509)          Total: -505 bytes
   text	   data	    bss	    dec	    hex	filename
 983707	    485	   7296	 991488	  f2100	busybox_old
 983202	    485	   7296	 990983	  f1f07	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 19:46:53 +01:00
Denys Vlasenko
dafbc2cdb8 bc: simplify bc_num_parseDecimal() further
function                                             old     new   delta
bc_program_num                                       925     912     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:38:52 +01:00
Denys Vlasenko
5ba55f1f35 bc: make all function pointers FAST_FUNC, on i486 this saves ~400 bytes
function                                             old     new   delta
bc_num_rem                                            91      95      +4
bc_num_inv                                            53      56      +3
bc_num_d                                             569     572      +3
bc_num_printDigits                                   136     137      +1
bc_program_assign                                    486     485      -1
dc_lex_token                                         684     682      -2
bc_vec_pop                                            27      25      -2
bc_vec_npop                                           55      53      -2
bc_program_read                                      335     333      -2
bc_program_print                                     713     711      -2
bc_parse_parse                                       462     460      -2
bc_lex_token                                        1280    1278      -2
bc_num_printChar                                      27      24      -3
bc_num_binary                                        150     147      -3
dc_parse_parse                                        59      55      -4
bc_vm_run                                            630     626      -4
bc_num_printHex                                       71      67      -4
bc_num_divmod                                        155     150      -5
bc_vec_free                                           24      18      -6
bc_string_free                                        15       9      -6
bc_num_free                                           15       9      -6
bc_id_free                                            15       9      -6
bc_parse_free                                         53      46      -7
bc_program_scale                                       8       -      -8
bc_num_r                                             245     237      -8
bc_func_free                                          35      27      -8
bc_result_free                                        57      46     -11
bc_num_a                                             454     443     -11
bc_num_sub                                            77      65     -12
bc_num_add                                            77      65     -12
bc_program_modexp                                    736     723     -13
bc_num_s                                             252     239     -13
bc_num_mul                                            62      49     -13
bc_num_mod                                            62      49     -13
bc_num_div                                            62      49     -13
bc_num_pow                                            47      31     -16
bc_program_exec                                     4081    4059     -22
bc_num_printNum                                      514     489     -25
bc_num_p                                             478     445     -33
bc_program_len                                        34       -     -34
bc_program_num                                       963     925     -38
bc_num_k                                             988     944     -44
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 4/36 up/down: 11/-416)         Total: -405 bytes
   text	   data	    bss	    dec	    hex	filename
 984536	    485	   7296	 992317	  f243d	busybox_old
 984131	    485	   7296	 991912	  f22a8	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:37:14 +01:00
Denys Vlasenko
c665c183f1 bc: 0xffffffffffffffff may be larger than unsigned long
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:15:42 +01:00
Denys Vlasenko
8b4cf0dbb0 bc: optimize bc_vec_concat()
function                                             old     new   delta
bc_vec_concat                                         71      66      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:12:58 +01:00
Denys Vlasenko
a7f1a36540 bc: simplify bc_program_len()
function                                             old     new   delta
bc_program_len                                        42      34      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:57:01 +01:00
Denys Vlasenko
44d79d866d bc: simplify bc_program_print()
function                                             old     new   delta
bc_program_print                                     730     713     -17

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:33:40 +01:00
Denys Vlasenko
b696d9ec20 bc: simplify bc_num_ulong2num()
function                                             old     new   delta
bc_num_ulong2num                                      64      59      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:22:15 +01:00
Denys Vlasenko
9311e01803 bc: move str-to-num conversion functions to their only caller, bc_num_parse()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 11:54:59 +01:00
Denys Vlasenko
218ed1cf54 bc: further simplify string-to-number conversion code
function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_program_num                                       983     963     -20
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-22)             Total: -22 bytes
   text	   data	    bss	    dec	    hex	filename
 985706	    477	   7296	 993479	  f28c7	busybox_old
 985684	    477	   7296	 993457	  f28b1	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 13:33:52 +01:00
Denys Vlasenko
4a024c7719 bc: simplify string-tonumber conversion code
function                                             old     new   delta
bc_program_num                                      1108     983    -125
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-125)           Total: -125 bytes
   text	   data	    bss	    dec	    hex	filename
 985831	    477	   7296	 993604	  f2944	busybox_old
 985706	    477	   7296	 993479	  f28c7	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 13:21:54 +01:00
Denys Vlasenko
3129f705fc bc: no need to "set to zero" BcNum after bc_num_init(), it already is
function                                             old     new   delta
bc_num_init                                           48      49      +1
bc_program_num                                      1115    1108      -7
bc_program_exec                                     4098    4081     -17
bc_vm_init                                           786     768     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-42)             Total: -41 bytes
   text	   data	    bss	    dec	    hex	filename
 985872	    477	   7296	 993645	  f296d	busybox_old
 985831	    477	   7296	 993604	  f2944	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 12:04:44 +01:00
Denys Vlasenko
e20e00de34 bc: add and use bc_num_init_DEF_SIZE()
function                                             old     new   delta
bc_num_init_DEF_SIZE                                   -      10     +10
bc_num_binary                                        150     148      -2
bc_program_pushVar                                   208     203      -5
bc_program_modexp                                    741     736      -5
bc_program_copyToVar                                 316     311      -5
bc_program_call                                      352     347      -5
bc_array_expand                                       88      83      -5
bc_program_num                                      1125    1115     -10
bc_vm_init                                           821     786     -35
bc_program_exec                                     4152    4098     -54
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/9 up/down: 10/-126)          Total: -116 bytes
   text	   data	    bss	    dec	    hex	filename
 985988	    477	   7296	 993761	  f29e1	busybox_old
 985872	    477	   7296	 993645	  f296d	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 11:44:20 +01:00
Denys Vlasenko
5ec4b49125 bc: in bc_program_execStr(), push two variables into inner scope
function                                             old     new   delta
bc_program_execStr                                   502     496      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 02:54:06 +01:00
Denys Vlasenko
927a7d6853 bc: in bc_program_exec(), push two variables into inner scope
While at it, delete empty lines.

function                                             old     new   delta
bc_program_exec                                     4179    4152     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 02:24:14 +01:00
Denys Vlasenko
8fa1e8e6e7 bc: add accessors for G.prog.strs[idx], G.prog.fns[idx]
function                                             old     new   delta
bc_program_str                                         -      17     +17
bc_program_func                                        -      17     +17
bc_program_addFunc                                   209     204      -5
bc_program_reset                                      70      64      -6
bc_program_printStream                               163     157      -6
bc_program_print                                     736     730      -6
bc_vm_file                                           226     219      -7
bc_parse_text                                        143     133     -10
bc_parse_reset                                       163     153     -10
bc_parse_endBody                                     375     365     -10
bc_parse_create                                      168     158     -10
bc_parse_addFunc                                      41      31     -10
bc_program_call                                      364     352     -12
bc_program_read                                      350     335     -15
bc_program_execStr                                   528     502     -26
bc_program_exec                                     4219    4179     -40
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/14 up/down: 34/-173)         Total: -139 bytes
   text	   data	    bss	    dec	    hex	filename
 985043	    485	   7296	 992824	  f2638	busybox_old
 984904	    485	   7296	 992685	  f25ad	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 00:03:57 +01:00
Denys Vlasenko
0f37b3286a bc: eliminate always the same params to bc_num_printBase()
function                                             old     new   delta
bc_program_print                                     739     736      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 23:48:53 +01:00
Denys Vlasenko
ebc41c9d94 bc: remove redundant error checks in bc_parse_print()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 23:36:28 +01:00