Skip to content

Planned change patch for mrb_vm_exec() #6307

Description

@dearblue

There are over 10 patches and I plan to split them up and do a PR.
Link to patch collection: master...dearblue:mruby:mruby-vm

When all patches are applied, I show how the object code size and stack size used by mrb_vm_exec() changes on several CPU architectures.

The comparison is the result of simply running the compiler from the command line and compiling src/vm.c.
The commit hashes to be compared are ac8846d and 873b8bb.

The filename of the object code is represented by #{revision}-#{gcc-name}-vm.o.

script and compilers
  • script

    for rev in ac8846d 873b8bb
    do
      git checkout $rev
    
      for gcc in /usr/local/bin/*-gcc-*.0
      do
        $gcc -Iinclude -Ibuild/host/include -fstack-usage -Os -c -o $rev-$(basename $gcc)-vm.o src/vm.c
      done
    done
    
    size ac8846d*.o 873b8bb*.o | sort -st- -k2
    grep -w mrb_vm_exec ac8846d-*.su 873b8bb-*.su | sort -st- -k2 | awk '{ printf "%3d %-15s %s\n", $2, $3, $1 }'
  • list of compilers on my FreeBSD 14.1/amd64

    /usr/local/bin/aarch64-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/arm-none-eabi-gcc-11.3.0
    /usr/local/bin/armv6-gnueabi-freebsd14.0-gcc-12.3.0
    /usr/local/bin/armv7-gnueabi-freebsd14.0-gcc-12.3.0
    /usr/local/bin/avr-gcc-14.1.0
    /usr/local/bin/i386-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/mips-unknown-freebsd14.0-gcc-9.5.0
    /usr/local/bin/mips64-unknown-freebsd14.0-gcc-9.5.0
    /usr/local/bin/powerpc-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/powerpc64-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/riscv32-unknown-elf-gcc-11.3.0
    /usr/local/bin/riscv64-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/sparc64-unknown-freebsd14.0-gcc-9.5.0
    /usr/local/bin/x86_64-unknown-freebsd14.0-gcc-12.3.0
    /usr/local/bin/xtensa-esp32-elf-gcc-5.2.0
    
  • result of size ac8846d*.o 873b8bb*.o | sort -st- -k2

       text   data   bss     dec      hex   filename
      36243      0     0   36243   0x8d93   ac8846d-aarch64-unknown-freebsd14.0-gcc-12.3.0-vm.o
      36554      0     0   36554   0x8eca   873b8bb-aarch64-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      36503      0     0   36503   0x8e97   ac8846d-arm-none-eabi-gcc-11.3.0-vm.o
      35978      0     0   35978   0x8c8a   873b8bb-arm-none-eabi-gcc-11.3.0-vm.o
    
      33879      0     0   33879   0x8457   ac8846d-armv6-gnueabi-freebsd14.0-gcc-12.3.0-vm.o
      32546      0     0   32546   0x7f22   873b8bb-armv6-gnueabi-freebsd14.0-gcc-12.3.0-vm.o
    
      33695      0     0   33695   0x839f   ac8846d-armv7-gnueabi-freebsd14.0-gcc-12.3.0-vm.o
      32362      0     0   32362   0x7e6a   873b8bb-armv7-gnueabi-freebsd14.0-gcc-12.3.0-vm.o
    
      51606      0     0   51606   0xc996   ac8846d-avr-gcc-14.1.0-vm.o
      51474      0     0   51474   0xc912   873b8bb-avr-gcc-14.1.0-vm.o
    
      31754      0     0   31754   0x7c0a   ac8846d-i386-unknown-freebsd14.0-gcc-12.3.0-vm.o
      28735      0     0   28735   0x703f   873b8bb-i386-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      45592    424     0   46016   0xb3c0   ac8846d-mips-unknown-freebsd14.0-gcc-9.5.0-vm.o
      45920    424     0   46344   0xb508   873b8bb-mips-unknown-freebsd14.0-gcc-9.5.0-vm.o
    
      45392    848     0   46240   0xb4a0   ac8846d-mips64-unknown-freebsd14.0-gcc-9.5.0-vm.o
      45920    848     0   46768   0xb6b0   873b8bb-mips64-unknown-freebsd14.0-gcc-9.5.0-vm.o
    
      33947      0     0   33947   0x849b   ac8846d-powerpc-unknown-freebsd14.0-gcc-12.3.0-vm.o
      35006      0     0   35006   0x88be   873b8bb-powerpc-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      35639     40     0   35679   0x8b5f   ac8846d-powerpc64-unknown-freebsd14.0-gcc-12.3.0-vm.o
      36594     40     0   36634   0x8f1a   873b8bb-powerpc64-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      29306      0     0   29306   0x727a   ac8846d-riscv32-unknown-elf-gcc-11.3.0-vm.o
      30382      0     0   30382   0x76ae   873b8bb-riscv32-unknown-elf-gcc-11.3.0-vm.o
    
      31492      0     0   31492   0x7b04   ac8846d-riscv64-unknown-freebsd14.0-gcc-12.3.0-vm.o
      32640      0     0   32640   0x7f80   873b8bb-riscv64-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      40306      0     0   40306   0x9d72   ac8846d-sparc64-unknown-freebsd14.0-gcc-9.5.0-vm.o
      40226      0     0   40226   0x9d22   873b8bb-sparc64-unknown-freebsd14.0-gcc-9.5.0-vm.o
    
      43734      0     0   43734   0xaad6   ac8846d-x86_64-unknown-freebsd14.0-gcc-12.3.0-vm.o
      38968      0     0   38968   0x9838   873b8bb-x86_64-unknown-freebsd14.0-gcc-12.3.0-vm.o
    
      26361      0     0   26361   0x66f9   ac8846d-xtensa-esp32-elf-gcc-5.2.0-vm.o
      26216      0     0   26216   0x6668   873b8bb-xtensa-esp32-elf-gcc-5.2.0-vm.o
    
  • result of grep -w mrb_vm_exec ac8846d-*.su 873b8bb-*.su | sort -st- -k2 | awk '{ printf "%3d %-15s %s\n", $2, $3, $1 }'

    400 static          ac8846d-aarch64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    384 static          873b8bb-aarch64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    248 static          ac8846d-arm-none-eabi-gcc-11.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    216 static          873b8bb-arm-none-eabi-gcc-11.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    216 static          ac8846d-armv6-gnueabi-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    200 static          873b8bb-armv6-gnueabi-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    216 static          ac8846d-armv7-gnueabi-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    200 static          873b8bb-armv7-gnueabi-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    456 dynamic,bounded ac8846d-avr-gcc-14.1.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    474 dynamic,bounded 873b8bb-avr-gcc-14.1.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    576 dynamic,bounded ac8846d-i386-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    624 dynamic,bounded 873b8bb-i386-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    352 static          ac8846d-mips-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1396:1:mrb_vm_exec
    368 static          873b8bb-mips-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1405:1:mrb_vm_exec
    
    576 static          ac8846d-mips64-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1396:1:mrb_vm_exec
    560 static          873b8bb-mips64-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1405:1:mrb_vm_exec
    
    368 static          ac8846d-powerpc-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    352 static          873b8bb-powerpc-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    656 static          ac8846d-powerpc64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    592 static          873b8bb-powerpc64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    288 static          ac8846d-riscv32-unknown-elf-gcc-11.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    272 static          873b8bb-riscv32-unknown-elf-gcc-11.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    528 static          ac8846d-riscv64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    528 static          873b8bb-riscv64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    832 static          ac8846d-sparc64-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1396:1:mrb_vm_exec
    800 static          873b8bb-sparc64-unknown-freebsd14.0-gcc-9.5.0-vm.su:vm.c:1405:1:mrb_vm_exec
    
    576 dynamic,bounded ac8846d-x86_64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1396:1:mrb_vm_exec
    656 dynamic,bounded 873b8bb-x86_64-unknown-freebsd14.0-gcc-12.3.0-vm.su:src/vm.c:1405:1:mrb_vm_exec
    
    240 static          ac8846d-xtensa-esp32-elf-gcc-5.2.0-vm.su:vm.c:1396:1:mrb_vm_exec
    240 static          873b8bb-xtensa-esp32-elf-gcc-5.2.0-vm.su:vm.c:1405:1:mrb_vm_exec
    

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions