[fpc-devel] ARM vs Thumb2 - can't have both
John Clymer
john at johnclymer.net
Tue Aug 23 16:01:10 CEST 2011
Digging some more around it today, came up with the following idea...
In the rtl/embedded folder - there is the "system" file for "ARM" - it is ALL
pascal - and compiles to either of Thumb2 or ARMV4 - but not both.
In that folder's Makefile.fpc, the units to be built are listed - the could be
switched to listing directories to get built.
One folder for ARMV4, one for Thumb2. A "system" file and rtl.cfg file sits in
each folder. The "system" file just bounces back down and includes the current
system files from the rtl/embedded folder, but the library gets built in the
core specific folder.
That's the easy part, the more difficult part will to be to get the compiler to
choose the correct system file. That is, the "usual" ARM folder where the
libraries sit would need to have the same 2 seperate subdirectorie, the compiler
would have to choose which one based on the core it's currently compiling for.
John
________________________________
From: David Welch <dwelch at dwelch.com>
To: FPC developers' list <fpc-devel at lists.freepascal.org>
Sent: Tue, August 23, 2011 10:39:50 AM
Subject: Re: [fpc-devel] ARM vs Thumb2 - can't have both
Most if not all of my references to thumb meant the original ARMv4T thumb
instruction set, definitely not the thumb2 extensions, nor ARMv5 or ARMv6
extensions.
If for example you had a thumb backend to fpc, you could easily solve this
problem, all of these libraries would run on both platforms, one compiler, one
set of libraries, compiled one time.
There is no thumb backend at the moment, this is the first problem to that
solution.
I figure most folks would not want to sink to the lowest common denominator.
I would then recommend splitting the arm/arm7/ARMv4 architecture from the
cortex-m3/ARMv7m, as implemented now they are two incompatible instruction
sets. One instruction set happens to share the name of the company, move beyond
that sticking point and create two architectures.
The third alternative is do what others do and build two sets of libraries, one
for each cpu type if that is the preferred term to distinguish arm and thumb2.
Even if they are in the same library file but by name the linker extracts the
arm cpu whatsit function from the thumb2 cpu whatsit function it is still two
compilations of the whatsit function.
You really have to pick one of those solutions, same instruction set or compile
the libraries twice either as two arches build one or the other but not both, or
two cpus within an arch and both/all cpus for an arch get built when the arch
compiler is built.
David
On 08/22/2011 01:15 AM, John Clymer wrote:
> Yes, all my references of Thumb meant Thumb2.
>
_______________________________________________
fpc-devel maillist - fpc-devel at lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20110823/c3731e08/attachment.html>
More information about the fpc-devel
mailing list