Skip to content

Shrink variables in mrb_vm_exec()#6318

Merged
matz merged 2 commits into
mruby:masterfrom
dearblue:shrink-vm-vars
Aug 6, 2024
Merged

Shrink variables in mrb_vm_exec()#6318
matz merged 2 commits into
mruby:masterfrom
dearblue:shrink-vm-vars

Conversation

@dearblue

Copy link
Copy Markdown
Contributor

This PR is commit b055fa5 and 4e7c100 in #6307.

Result of `gcc -fstack-usage` for some targets (only `mrb_vm_exec()`)
vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 864     static
vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 816     static
vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 400     static
vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 384     static

vm-arm-none-eabi-gcc-11.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec       296     static
vm-arm-none-eabi-gcc-11.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec       248     static
vm-arm-none-eabi-gcc-11.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec       240     static
vm-arm-none-eabi-gcc-11.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec       216     static

vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   368     static
vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   336     static
vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   216     static
vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   200     static

vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   360     static
vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   344     static
vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   216     static
vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   200     static

vm-avr-gcc-14.1.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 523     dynamic,bounded
vm-avr-gcc-14.1.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 463     dynamic,bounded
vm-avr-gcc-14.1.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 456     dynamic,bounded
vm-avr-gcc-14.1.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 468     dynamic,bounded

vm-i386-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec    896     dynamic,bounded
vm-i386-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec    896     dynamic,bounded
vm-i386-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec    592     dynamic,bounded
vm-i386-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec    624     dynamic,bounded

vm-mips-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec     480     static
vm-mips-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec     360     static
vm-mips-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec     352     static
vm-mips-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec     360     static

vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   1024    static
vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   864     static
vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec   576     static
vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec   560     static

vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 368     static
vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 368     static
vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 368     static
vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 352     static

vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec       640     static
vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec       624     static
vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec       656     static
vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec       592     static

vm-riscv32-unknown-elf-gcc-11.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 224     static
vm-riscv32-unknown-elf-gcc-11.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 192     static
vm-riscv32-unknown-elf-gcc-11.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 288     static
vm-riscv32-unknown-elf-gcc-11.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 272     static

vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 592     static
vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 576     static
vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec 528     static
vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec 528     static

vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec  768     static
vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec  768     static
vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec  832     static
vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec  800     static

vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec  1456    static
vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec  1504    static
vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec  608     dynamic,bounded
vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec  672     dynamic,bounded

vm-xtensa-esp32-elf-gcc-5.2.0~-O3-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec     288     static
vm-xtensa-esp32-elf-gcc-5.2.0~-O3-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec     320     static
vm-xtensa-esp32-elf-gcc-5.2.0~-Os-1.a668e6d81.su:<stdin>:1407:1:mrb_vm_exec     240     static
vm-xtensa-esp32-elf-gcc-5.2.0~-Os-2.822e3fdfd.su:<stdin>:1409:1:mrb_vm_exec     240     static
Result of `size vm.o` for some targets
   text   data   bss     dec       hex   filename
  55691      0     0   55691    0xd98b   vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  52283      0     0   52283    0xcc3b   vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  36379      0     0   36379    0x8e1b   vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  36815      0     0   36815    0x8fcf   vm-aarch64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  54718      0     0   54718    0xd5be   vm-arm-none-eabi-gcc-11.3.0~-O3-1.a668e6d81.o
  52410      0     0   52410    0xccba   vm-arm-none-eabi-gcc-11.3.0~-O3-2.822e3fdfd.o
  36579      0     0   36579    0x8ee3   vm-arm-none-eabi-gcc-11.3.0~-Os-1.a668e6d81.o
  35891      0     0   35891    0x8c33   vm-arm-none-eabi-gcc-11.3.0~-Os-2.822e3fdfd.o

  49371      0     0   49371    0xc0db   vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  44803      0     0   44803    0xaf03   vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  33987      0     0   33987    0x84c3   vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  32879      0     0   32879    0x806f   vm-armv6-gnueabi-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  48891      0     0   48891    0xbefb   vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  44751      0     0   44751    0xaecf   vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  33795      0     0   33795    0x8403   vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  32691      0     0   32691    0x7fb3   vm-armv7-gnueabi-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  75662      0     0   75662   0x1278e   vm-avr-gcc-14.1.0~-O3-1.a668e6d81.o
  69510      0     0   69510   0x10f86   vm-avr-gcc-14.1.0~-O3-2.822e3fdfd.o
  51752      0     0   51752    0xca28   vm-avr-gcc-14.1.0~-Os-1.a668e6d81.o
  51318      0     0   51318    0xc876   vm-avr-gcc-14.1.0~-Os-2.822e3fdfd.o

  51290      0     0   51290    0xc85a   vm-i386-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  48317      0     0   48317    0xbcbd   vm-i386-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  30935      0     0   30935    0x78d7   vm-i386-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  28786      0     0   28786    0x7072   vm-i386-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  60344    424     0   60768    0xed60   vm-mips-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.o
  58488    424     0   58912    0xe620   vm-mips-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.o
  45640    424     0   46064    0xb3f0   vm-mips-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.o
  45768    424     0   46192    0xb470   vm-mips-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.o

  64912    848     0   65760   0x100e0   vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.o
  60976    848     0   61824    0xf180   vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.o
  45344    848     0   46192    0xb470   vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.o
  45808    848     0   46656    0xb640   vm-mips64-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.o

  57279      0     0   57279    0xdfbf   vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  52899      0     0   52899    0xcea3   vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  34051      0     0   34051    0x8503   vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  35307      0     0   35307    0x89eb   vm-powerpc-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  61887     32     0   61919    0xf1df   vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  57995     32     0   58027    0xe2ab   vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  35727     40     0   35767    0x8bb7   vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  36919     40     0   36959    0x905f   vm-powerpc64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  46764      0     0   46764    0xb6ac   vm-riscv32-unknown-elf-gcc-11.3.0~-O3-1.a668e6d81.o
  43972      0     0   43972    0xabc4   vm-riscv32-unknown-elf-gcc-11.3.0~-O3-2.822e3fdfd.o
  29402      0     0   29402    0x72da   vm-riscv32-unknown-elf-gcc-11.3.0~-Os-1.a668e6d81.o
  30304      0     0   30304    0x7660   vm-riscv32-unknown-elf-gcc-11.3.0~-Os-2.822e3fdfd.o

  50727      0     0   50727    0xc627   vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-O3-1.a668e6d81.o
  48283      0     0   48283    0xbc9b   vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-O3-2.822e3fdfd.o
  31544      0     0   31544    0x7b38   vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-Os-1.a668e6d81.o
  32582      0     0   32582    0x7f46   vm-riscv64-unknown-freebsd14.0-gcc-12.3.0~-Os-2.822e3fdfd.o

  62722      0     0   62722    0xf502   vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-O3-1.a668e6d81.o
  54914      0     0   54914    0xd682   vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-O3-2.822e3fdfd.o
  40402      0     0   40402    0x9dd2   vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-Os-1.a668e6d81.o
  40106      0     0   40106    0x9caa   vm-sparc64-unknown-freebsd14.0-gcc-9.5.0~-Os-2.822e3fdfd.o

  60423      0     0   60423    0xec07   vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-O3-1.a668e6d81.o
  55895      0     0   55895    0xda57   vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-O3-2.822e3fdfd.o
  41264      0     0   41264    0xa130   vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-Os-1.a668e6d81.o
  37996      0     0   37996    0x946c   vm-x86_64-portbld-freebsd14.0-gcc-15.0.0~-Os-2.822e3fdfd.o

  36018      0     0   36018    0x8cb2   vm-xtensa-esp32-elf-gcc-5.2.0~-O3-1.a668e6d81.o
  36658      0     0   36658    0x8f32   vm-xtensa-esp32-elf-gcc-5.2.0~-O3-2.822e3fdfd.o
  26221      0     0   26221    0x666d   vm-xtensa-esp32-elf-gcc-5.2.0~-Os-1.a668e6d81.o
  26133      0     0   26133    0x6615   vm-xtensa-esp32-elf-gcc-5.2.0~-Os-2.822e3fdfd.o

Unfortunately, it does not necessarily reduce stack usage or object code size in all environments.
Nevertheless, I believe it will have a positive impact on embedded CPUs.

dearblue added 2 commits July 31, 2024 22:27
Introduce the `ci` variable instead and refer to it indirectly.
Can be referenced by traversing through the `irep` pointer.
@dearblue dearblue requested a review from matz as a code owner July 31, 2024 14:32
@github-actions github-actions Bot added the core label Jul 31, 2024
@dearblue

Copy link
Copy Markdown
Contributor Author

Addendum.

Commit 98c12b0 in #6307 was cancelled for inclusion as it did not have much positive impact.

@matz matz merged commit 320c757 into mruby:master Aug 6, 2024
@matz

matz commented Aug 6, 2024

Copy link
Copy Markdown
Member

Merged. Does this mean we can close #6307 now?

@dearblue

dearblue commented Aug 6, 2024

Copy link
Copy Markdown
Contributor Author

Thank you.
I am not opposed to closing #6307, but I have 4 more commits scheduled.

@matz

matz commented Aug 6, 2024

Copy link
Copy Markdown
Member

OK.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants