ponylang / ponyc

Pony is an open-source, actor-model, capabilities-secure, high performance programming language
http://www.ponylang.io
BSD 2-Clause "Simplified" License
5.71k stars 415 forks source link

Add Support for ARMv6 #3212

Open SeanTAllen opened 5 years ago

SeanTAllen commented 5 years ago

Currently broken. We will be updating existing ARM support to indicate that ARMv7 and up are supported. If you anyone wants ARMv6 support, they will need to add support for it.

https://github.com/ponylang/ponyc/issues/3206

patches11 commented 5 years ago

I have put a little work into this, in order to get ponyc working on a Raspberry Pi Zero W.

I believe the issue comes down to some ASM in cpu.c, specifically in the function: ponyint_cpu_tick

The simplest fix (not sure its a good idea, but it is what I have been using) is to disable the ASM for ARMv6:

https://github.com/ponylang/ponyc/compare/master...patches11:armv6-simple?expand=1

Based on some feedback in https://github.com/ponylang/ponyc/issues/3206 I attempted to update ponyint_cpu_tick to use ARMv6 specific ASM but this did not seem to work in my testing, attempt here:

https://github.com/ponylang/ponyc/compare/master...patches11:armv6-asm?expand=1

Which crashes with an illegal instruction on the hello world example here: 0xf704 mrc 15, 0, r3, cr15, cr9, {0}

Neither of these solve issue https://github.com/ponylang/ponyc/issues/3111 but I believe as long as you specify the tune in your build it should work fine, that could probably just be added to the README, I have been using this to build (maybe overkill): make default_pic=true arch=armv6 cpu=arm1176jzf-s tune=arm6 fpu=vfp