-------- Ursprüngliche Nachricht -------- Von: Seth Berman <[hidden email]> Datum: 10.02.2017 20:02 (GMT+01:00) An: VA Smalltalk <[hidden email]> Betreff: VA Smalltalk on Raspberry Pi
We are going to be showing this at Camp Smalltalk RDU, so if you interested in this kind of thing, I encourage you to come.
I've attached a picture of VA, running on top of our new virtual machine, compiled for the Raspberry Pi's ARM processor.
It's quite snappy...surprisingly so given what it's running on.
What may surprise you to know is that this was done in about 4 hours over the weekend when I had some spare time. A fact I attribute more to the portability of the vm rather than my ability.
In fact, I spent more time dealing with Motif/X11 linking issues than the actual virtual machine port.
The only thing that hung me up, forcing me to print out pages of bytecodes and compare them against a Linux/X86 run, was the fact that 'char' datatypes in C compilers are unsigned by default on the ARM.
So our Linux x86 defininition of an I_8 (a datatype we define that is supposedly a signed byte)...was in fact not a signed byte on the ARM. So a bytecode to jump to a small negative offset turned into a jump to a much larger positive offset.
But redefining it as 'signed char' fixed that up.
Who knew? Well...somebody knew...just not me.
We have multiple ways we can build our vm. From C interpreter versions that have zero assembly (well, assembly managed by us) all the way to the LLVM code-generated version which are the most performant.
I chose somewhere in between to start with. The only assembly I did was to make use of gcc's register intrinsics allowing us to pin important vm state to registers.
That was the fun part...then came Motif...but I'll leave that where it is because it's not that interesting...just painful:)