Denys Vlasenko
6ed7fb0a87
bc: optimize bc_vec_push() usage
...
function old new delta
bc_parse_pushNUM 87 80 -7
zbc_parse_stmt_possibly_auto 1697 1689 -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15) Total: -15 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 22:16:17 +01:00
Denys Vlasenko
19eee8ed7c
bc: fix for() to not leave data on stack
...
function old new delta
zbc_parse_stmt_possibly_auto 1665 1697 +32
zbc_vm_process 672 701 +29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 61/0) Total: 61 bytes
text data bss dec hex filename
981656 485 7296 989437 f18fd busybox_old
981748 485 7296 989529 f1959 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 20:29:34 +01:00
Denys Vlasenko
5d57bc442d
bc: fix infinite state growth for "yes 1 | bc" case
...
function old new delta
zbc_vm_process 585 672 +87
bc_func_init 50 86 +36
zbc_program_num 990 1022 +32
bc_program_str 17 47 +30
bc_program_current_func - 22 +22
bc_parse_pushNUM 66 87 +21
bc_func_free 27 43 +16
zbc_num_binary 145 147 +2
bc_program_reset 64 61 -3
bc_parse_pushSTR 73 65 -8
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 7/2 up/down: 246/-11) Total: 235 bytes
text data bss dec hex filename
981393 485 7296 989174 f17f6 busybox_old
981656 485 7296 989437 f18fd busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 16:22:26 +01:00
Denys Vlasenko
447dc02c27
bc: fix comment
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:39:02 +01:00
Denys Vlasenko
52caa007e3
bc: for(;;) fix from upstream
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:35:22 +01:00
Denys Vlasenko
047154472a
bc: shrink bc_program_add_fn()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:10:26 +01:00
Denys Vlasenko
44a99ca617
bc: "dc only" config does not need G.prog.fn_map
...
function old new delta
bc_program_add_fn - 43 +43
bc_vm_init 655 675 +20
bc_program_addFunc 138 118 -20
zdc_parse_expr 658 635 -23
zdc_program_asciify 447 407 -40
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/3 up/down: 63/-83) Total: -20 bytes
text data bss dec hex filename
984739 489 7312 992540 f251c busybox_old
984712 489 7312 992513 f2501 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20 20:34:09 +01:00
Denys Vlasenko
5acd14ba5b
bc: fix keyword matching to not think "ifz" is the "if" keyword
...
function old new delta
zbc_lex_next 2224 2225 +1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20 16:48:50 +01:00
Denys Vlasenko
503faf9d53
bc: shrink "dc only" code by dropping unused structure members
...
function old new delta
zbc_program_num 979 981 +2
zbc_program_pushArray 147 145 -2
bc_program_pushVar 198 196 -2
bc_program_func 17 15 -2
dc_num_printChar 24 21 -3
bc_program_retire 35 32 -3
bc_program_binOpRetire 46 43 -3
zdc_program_printStream 153 148 -5
zbc_program_prep 91 86 -5
zbc_program_copyToVar 300 295 -5
zdc_program_modexp 721 715 -6
zbc_program_binOpPrep 311 305 -6
bc_program_addFunc 138 132 -6
bc_num_printNewline 51 45 -6
bc_num_printHex 67 61 -6
bc_num_printDigits 137 131 -6
zdc_program_assignStr 146 137 -9
bc_program_reset 64 55 -9
bc_func_free 27 5 -22
bc_parse_free 38 8 -30
bc_parse_create 92 47 -45
bc_func_init 50 5 -45
dc_main 691 645 -46
zdc_program_execStr 496 442 -54
zbc_program_print 677 623 -54
zbc_vm_process 204 137 -67
zbc_program_exec 4132 4057 -75
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/26 up/down: 2/-522) Total: -520 bytes
text data bss dec hex filename
969767 485 7296 977548 eea8c busybox_old
969210 485 7296 976991 ee85f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20 16:24:18 +01:00
Denys Vlasenko
eaa3b00002
bc: shorten bc_program_addFunc()
...
function old new delta
bc_func_init - 50 +50
bc_program_addFunc 201 138 -63
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 50/-63) Total: -13 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 20:05:50 +01:00
Denys Vlasenko
408b7d45f6
bc: fix "dc only" and "bc only" configs
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:43:03 +01:00
Denys Vlasenko
fa21079183
bc: rename dc-specific functions, simplify zdc_program_execStr() a bit
...
function old new delta
zbc_program_execStr 496 - -496
zdc_program_execStr - 491 +491
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:38:51 +01:00
Denys Vlasenko
44dbe675dd
bc: rename zbc_parse_string->bc_parse_pushSTR, do not emit next opcode in it
...
function old new delta
bc_parse_pushSTR - 73 +73
zbc_parse_stmt_possibly_auto 1638 1640 +2
zbc_parse_string 89 - -89
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 75/-89) Total: -14 bytes
text data bss dec hex filename
981377 485 7296 989158 f17e6 busybox_old
981363 485 7296 989144 f17d8 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:10:40 +01:00
Denys Vlasenko
ea5cad2a0d
bc: avoid bc_vec_item() calls in bc_vm_run()
...
function old new delta
bc_vm_run 124 112 -12
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 18:09:31 +01:00
Denys Vlasenko
eac0de55d6
bc: avoid bc_vec_item() calls in bc_array_copy()
...
function old new delta
zbc_program_copyToVar 311 300 -11
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:59:30 +01:00
Denys Vlasenko
87888ce4d8
bc: avoid successive bc_vec_item(&func->autos, i)
...
function old new delta
zbc_func_insert 97 100 +3
zbc_program_call 353 354 +1
zbc_program_exec 4085 4078 -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-7) Total: -3 bytes
text data bss dec hex filename
981403 485 7296 989184 f1800 busybox_old
981400 485 7296 989181 f17fd busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:55:23 +01:00
Denys Vlasenko
f36a0adf8b
bc: remove unnecessary union use
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:15:04 +01:00
Denys Vlasenko
dfe1dd2031
bc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"
...
function old new delta
zbc_program_print 680 677 -3
zbc_program_exec 4089 4085 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-7) Total: -7 bytes
text data bss dec hex filename
981404 485 7296 989185 f1801 busybox_old
981397 485 7296 989178 f17fa busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:09:01 +01:00
Denys Vlasenko
65e1046abf
bc: open-code bc_parse_updateFunc() macro
...
This clearly shows one place which would need changing
for nested funcdefs to work.
function old new delta
bc_parse_reset 106 110 +4
zbc_vm_process 586 585 -1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-1) Total: 3 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 15:13:14 +01:00
Denys Vlasenko
684d441f5c
bc: make bc_program_addFunc() return new idx, untangle &p->fidx interaction
...
In:
bc_program_addFunc(name, idx);
p->func = bc_program_func(p->fidx);
in some cases p->fidx was updated by _first_ statement - because passed idx
was pointing at it. This was very obscure.
function old new delta
zdc_parse_expr 653 658 +5
bc_program_addFunc 204 201 -3
zbc_vm_process 594 586 -8
bc_vm_init 663 655 -8
zbc_parse_name 482 472 -10
bc_parse_addFunc 25 - -25
zbc_program_asciify 473 447 -26
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/5 up/down: 5/-80) Total: -75 bytes
text data bss dec hex filename
981482 485 7296 989263 f184f busybox_old
981401 485 7296 989182 f17fe busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 14:59:22 +01:00
Denys Vlasenko
085b420220
bc: "reload stack only after insts" change missed a few places
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 14:02:59 +01:00
Denys Vlasenko
5aa54830bf
bc: rename a few functions
...
function old new delta
bc_map_find_ge - 71 +71
bc_map_find_exact - 50 +50
bc_map_index 50 - -50
bc_map_find 71 - -71
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 0/0 up/down: 121/-121) Total: 0 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 13:55:53 +01:00
Denys Vlasenko
e3d3d2067d
bc: remove redundant strdup+free in zbc_parse_call()
...
function old new delta
zbc_parse_name 527 482 -45
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-45) Total: -45 bytes
text data bss dec hex filename
981541 485 7296 989322 f188a busybox_old
981486 485 7296 989267 f1853 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 13:20:02 +01:00
Denys Vlasenko
4796a1d537
bc: delete G.prog.strmb for real
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 12:48:16 +01:00
Denys Vlasenko
b80d7aad1b
bc: in execution loop, reload stack only after insts which can change it
...
Only these functions affect G.prog.exestack:
zbc_program_read
zbc_program_call
zbc_program_return
zbc_program_nquit
zbc_program_execStr
function old new delta
zbc_program_exec 3995 4093 +98
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 98/0) Total: 98 bytes
text data bss dec hex filename
981364 485 7296 989145 f17d9 busybox_old
981462 485 7296 989243 f183b busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 12:35:27 +01:00
Denys Vlasenko
d6e24bd795
bc: simplify bc_array_expand()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 20:10:48 +01:00
Denys Vlasenko
30a8e0c2f9
bc: code shrink
...
function old new delta
zbc_program_print 684 680 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4) Total: -4 bytes
text data bss dec hex filename
981368 485 7296 989149 f17dd busybox_old
981364 485 7296 989145 f17d9 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 19:20:04 +01:00
Denys Vlasenko
694d2982e5
bc: code shrink
...
function old new delta
bc_program_name 67 63 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4) Total: -4 bytes
text data bss dec hex filename
981372 485 7296 989153 f17e1 busybox_old
981368 485 7296 989149 f17dd busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 19:17:11 +01:00
Denys Vlasenko
7b30bc0222
bc: shrink bc_program_pushVar()
...
function old new delta
bc_program_pushVar 203 198 -5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 17:14:34 +01:00
Denys Vlasenko
d340143247
bc: get rid of G.prog.ob, G.prog.strmb
...
function old new delta
zbc_num_printNum 489 540 +51
zbc_program_asciify 426 473 +47
zbc_program_print 686 684 -2
zbc_program_exec 4008 3995 -13
zbc_program_assign 474 440 -34
bc_vm_init 739 663 -76
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/4 up/down: 98/-125) Total: -27 bytes
text data bss dec hex filename
981404 485 7296 989185 f1801 busybox_old
981377 485 7296 989158 f17e6 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 17:00:35 +01:00
Denys Vlasenko
09fe0aaefa
bc: do not show -i in --help, it's a NOP (for now)
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 16:32:25 +01:00
Denys Vlasenko
7f2d59c38d
bc: style edit, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 16:24:07 +01:00
Denys Vlasenko
3f940c9c70
bc: shrink bc_program_index()
...
function old new delta
bc_program_index 66 47 -19
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-19) Total: -19 bytes
text data bss dec hex filename
981418 485 7296 989199 f180f busybox_old
981399 485 7296 989180 f17fc busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 15:49:42 +01:00
Denys Vlasenko
55f3cab7e9
bc: fix "echo -n '#foo' | bc" not eating last 'o'
...
function old new delta
zdc_parse_expr 656 653 -3
bc_lex_lineComment 39 36 -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-6) Total: -6 bytes
text data bss dec hex filename
981424 485 7296 989205 f1815 busybox_old
981418 485 7296 989199 f180f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:39:33 +01:00
Denys Vlasenko
a199cc95b7
bc: shrink zdc_parse_expr()
...
function old new delta
zdc_parse_expr 656 653 -3
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:11:35 +01:00
Denys Vlasenko
07597cd35d
bc: optimize zbc_lex_string()
...
function old new delta
zbc_lex_next 2359 2353 -6
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:03:20 +01:00
Denys Vlasenko
ef271da33f
bc: shrink zdc_lex_string()
...
This actually fixes a rather obscure bug. This was failing to find
end of the string:
$ echo -n '[foo]' | dc
dc: string end could not be found
function old new delta
zbc_lex_next 2230 2141 -89
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-89) Total: -89 bytes
text data bss dec hex filename
981461 485 7296 989242 f183a busybox_old
981372 485 7296 989153 f17e1 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:48:37 +01:00
Denys Vlasenko
d4258dd321
bc: another for() loop simplified
...
function old new delta
zbc_program_print 688 686 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:22:23 +01:00
Denys Vlasenko
5c0c5abba0
bc: simplify another for() loop
...
function old new delta
zbc_num_d 563 557 -6
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:15:55 +01:00
Denys Vlasenko
6b0fbd14fc
bc: rewrite more for() loops
...
function old new delta
bc_program_name 75 67 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:55:40 +01:00
Denys Vlasenko
71c82d1d8c
bc: rewrite another for() loop
...
function old new delta
zbc_num_d 570 563 -7
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:43:21 +01:00
Denys Vlasenko
e2e6ffd3c5
bc: replace signed division / 10 by unsigned
...
function old new delta
zbc_num_a 443 441 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:23:16 +01:00
Denys Vlasenko
4113e1f2cd
bc: rewrite bc_num_compare() to be readable
...
function old new delta
bc_num_compare 59 51 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
57734c926b
bc: fold zbc_num_stream() into its single caller
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
f6e3f8511e
bc: get rid of BcNum BcProgram::ib,hexb
...
function old new delta
zbc_program_num 907 943 +36
zbc_program_assign 485 474 -11
bc_vm_init 757 739 -18
bc_num_ten 30 - -30
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/2 up/down: 36/-59) Total: -23 bytes
text data bss dec hex filename
981532 485 7296 989313 f1881 busybox_old
981509 485 7296 989290 f186a busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
0f31a5c79e
bc: fixes to bugs found while testing 64-bit build
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:16:48 +01:00
Denys Vlasenko
f4f10720fe
bc: fixed from 64-bit compile
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 02:23:53 +01:00
Denys Vlasenko
4b72aebe80
bc: remove "error after expression parsing" check
...
It is misplaced: caller knows better what can or cannot follow the expression.
Sometimes even caller's caller: "if (1) return a+b else..." -
parser of "return" does not know that "else" after it is valid,
parser of stmt does not know it either, - only parser of
"if" knows it!
The removed code balked on e.g. "{ print 1 }" statement.
This does not break any valid programs, but starts accepting some
invalid ones, e.g. "print 1 print 2" would work.
function old new delta
zcommon_parse_expr 40 32 -8
zbc_parse_name 509 494 -15
zbc_parse_stmt_possibly_auto 1678 1638 -40
bc_parse_expr_empty_ok 2025 1977 -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-111) Total: -111 bytes
text data bss dec hex filename
981599 485 7296 989380 f18c4 busybox_old
981488 485 7296 989269 f1855 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 17:00:29 +01:00
Denys Vlasenko
b44a7f1d66
bc: tighten up input NUL handling
...
function old new delta
static.dc_lex_tokens - 90 +90
bc_error_bad_character 17 31 +14
static.dc_lex_regs - 13 +13
bc_read_line 406 410 +4
bc_program_index 64 66 +2
dc_lex_regs 13 - -13
zdc_parse_expr 671 656 -15
zbc_lex_next 2318 2230 -88
dc_lex_tokens 91 - -91
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 3/2 up/down: 123/-207) Total: -84 bytes
text data bss dec hex filename
981667 485 7296 989448 f1908 busybox_old
981599 485 7296 989380 f18c4 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 11:58:20 +01:00
Denys Vlasenko
e42cc19b51
bc: simplify zdc_parse_string()
...
function old new delta
bc_program_index 64 66 +2
zdc_parse_expr 671 656 -15
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-15) Total: -13 bytes
text data bss dec hex filename
981667 485 7296 989448 f1908 busybox_old
981655 485 7296 989436 f18fc busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 11:02:26 +01:00