Apart from modifications to the aarch64 backend (to support 128 bit arithmetic, adding additional debug info so that backtrace works, supporting FuncRef's and fixing the way Branch2 works), I have made a few changes to the other parts of the code:
- I added a few simple utility functions in ir.rs and op.rs
- I added a test that tests for 128-bit subtraction
- I modified entrypoints.rs so that the the 128-bit arithmetic functions operate on UINT128's as opposed to pairs of UINT64's
- I also added conversion functions to entrypoints.rs and math.rs that convert to and from floating-point and int128's
- I modified the x86_64 instruction selection so that it calls the 128 bit arithmetic functions with 128-bit arguments (and not pairs of 64-bit ones)
- (Note: I haven't implimented the floating point conversions in x86_64, but that should be easilly doable by just copying my aarch64 code)
Running the som interpreter (when compiled with Zebu) takes 116.44 seconds
(specifically the command
/tmp/RPySOM-no-jit-mu -cp ./RPySOM/Smalltalk ./RPySOM/TestSuite/TestHarness.som
,
after running pytest ./test_som.py
)
Running the SOM interpret through rpythons C-backend took 0.01 seconds
(i.e. runing ./RPySOM-no-jit -cp ../RPySOM/Smalltalk ../RPySOM/TestSuite/TestHarness.som
after running python2 ./rpython/bin/rpython -O3 --no-shared ../RPySOM/src/targetsomstandalone.py
Interestingly this is faster than running on my x86-64 virtual machine (whose processor is much better than the aarch64 machines) which took 0.57 seconds, however running it through Zebu was slower (x86-64 only took 76.08 seconds).
I.e. it is about 11.6 thousand times slower running through Mu on aarch64 and only 1.5 thousand times slower on x86-64.
Note: the time with interpreting through python (i.e. running python2 ./src/targetsomstandalone.py -cp ./Smalltalk ./TestSuite/TestHarness.som
) was 5.17 seconds on aarc64 and 5.48 on x86-64, indicating that Zebu is 22.5 times slower than python on aarch64 and only 14 times slower on x86-64.