Merge aarch64 into master
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,
Running the SOM interpret through rpythons C-backend took 0.01 seconds
./RPySOM-no-jit -cp ../RPySOM/Smalltalk ../RPySOM/TestSuite/TestHarness.som
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.