[LLVMdev] LLC ARM Backend maintainer

Don Quixote de la Mancha quixote at dulcineatech.com
Thu Oct 13 10:47:28 PDT 2011

On Thu, Oct 13, 2011 at 10:00 AM, Joe Abbey <jabbey at arxan.com> wrote:
> However, we don't have testing resources to test both our product and LLVM
> on a host of target boards.  We have some chumbys, beagleboards, iPhones,
> iPod Touches, tables, Android Phones, etc.  And most of those are already
> booked solid with our own regression tests (most of which are based on
> llvm-test-suite)
> Could ARM enable us with testing hardware/resources?

The ARM-based Raspberry Pi is very close to shipping.  The entry-level
unit will retail for just $25 with a higher-end model for $35.  I
don't recall who makes it, but there is an ARM desktop computer that
retails for $149, with the same company making an ARM Netbook for

I have a Gumstix Overo Fire COM which I'm using mostly to experiment
with ARM assembly code and ARM-specific optimizations in C, C++ and
Objective-C.  When I get it configured reliably I'd be happy to
dedicate it as a test machine most of the time.


This has an ARM Cortex A8 with NEON SIMD as well as a Texas
Instruments DSP.  The DSP isn't programmed yet but could readily be
with TI's DSP/BIOS and Code Composer Studio.

I just spent days and days and days building all of Anstrom Linux for
it, so it has a full GUI desktop environment, development tools and
God Almighty Knows What Else installed on it.

It is on my home LAN which has a dynamic IP, but I understand there is
a way I can set up a tunnel to my web server which has a fixed IP.  I
can also ask my hosting service for an additional IP so if necessary I
could tunnel ALL the ports to my Gumstix board.

I also have a first-generation Apple iPhone which has iOS 3.0.6
installed on it.

 To use it for a testing bot I'd need to prevent it from ever going to
sleep; I *think* I can do that by setting Auto-Lock to Never in the
General section of the Settings App.

 I would need to package the tests as some kind of iPhone App which
(maybe) I could load on the phone automatically by automating either
iTunes or the iPhone Configuration Utility with AppleScript.

I'm not sure what ARM CPU my first-gen iPhone has but I think it uses
the arm6 instruction set.

Finally I have three Oxford Semiconductor FireWire / USB / Parallel
IDE storage bridge chip target boards.

They all have ARM7TDMI cores with 64 kb to 128 kb of Flash and some
microscopic amount of RAM: my OXFW911 chip has 64 kb of 16-bit Flash
but only 1800 BYTES - not Megabytes, not Kilobytes, but just BYTES -
of RAM.

There wouldn't be enough memory in these things to run a shell, but
any of the tests that could be packaged as a subroutine with a single
entry point could be compiled into the firmware.

These all run 16-but Thumb 1 and 32-bit ARM code.  My iOS devices - I
also have a first-gen iPad and an iPhone 4 - can run Thumb 2.

If you'd like me to set these all up to do building and testing I'd be
happy to, but I need some handholding.

 I've been trying to bootstrap llvm-gcc4.2 on Ubuntu 11.04 with the
aim of using the CLang analyzer on ZooLIb (http://www.zoolib.org/) but
the bootstrap always fails because of bizarre problems with autoconf's
configure scripts.

I've tried to debug the configure scripts but have yet to have any
joy.  IMHO autoconf is A Tool of the Devil.  ZooLib is even more
cross-platform than autoconf is, but does not need shell scripts at
all to configure it.

I need to catch some ZZZs now, I've been up all night.  I'll have
another go at configuring my Overo this evening, then will try
bootstraping LLVM for x86 again.  If that works then I'll bootstrap it
for ARM as well.

You can also run the tests in a emulator.  The timing won't be
accurate but you should be able to catch gross speed regressions.

There are several emulators available; the ones I know about are
Softgun, QEMU, the GNU Debugger GDB and the ARM Holdings development
system emulator.  There is another one that I came across once whose
name I don't recall.

Some emulators emulate a full computer with I/O devices so you can run
an OS on them.  These emulators could then host the build and not just
the test.

There are other simulators that just execute a single subroutine tree
and provide standard input and output.

The cool thing about this kind of emulator is that one can count the
number of instructions required to go from the beginning to the end of
the subroutine, or with the addition of a memory map that gives access
times for various kinds of memory (16-bit Flash or Dynamic RAM) you
can get cycle counts for the subrouine.

The ARM Holdings emulator does this; I used it with great success to
profile an Advanced Encryption Standard encryptor a while back.

Ever Faithful,

Don Quixote
Don Quixote de la Mancha
Dulcinea Technologies Corporation
Software of Elegance and Beauty
quixote at dulcineatech.com

More information about the llvm-dev mailing list