except for a few older ARM's both platforms support thumb code, so
anything that is shared could be compiled for thumb with some target
specific trampolines to get there
ARM:
0x00000: b _pre_start
...
_pre_start:
ldr r0,_start
bx r0
.pool
cortex-m3:
0x0000: _stac_top
0x0004: .word _start
.thumb_func
_start:
limit to thumb instructions (no thumb2)
same works for interrupts as well...
If everything is written in an thumb interwork fashion then you can jump
around from target specific block to target specific block, PASCALMAIN
can be arm for the arm target and thumb2 for the cortex-m3 target for
example and it all works.
BTW if you add .thumb_func
.thumb_func
.globl _start
.text
_start:
you dont have to do this:
.long _start+1
you can do this instead:
.long _start
at least for gnu as, not sure if this code is targeted at different
assemblers.
On 08/21/2011 05:58 PM, John Clymer wrote:
Been playing with the ARM / Thumb2 part - specifically for the Thumb2
line-up.
The compiler proper can be built to switch between the two with a
command line switch. However, the RTL gets called as <ARCH>-<SYSTEM>,
this only allows the RTL to compiled for one or the other.
This may be by design - in which case there should be a big BOLD note
added to the Arm port page. Or it may be unintentional - in which case
it should be switched to <ARCH>-<CPU>-<SYSTEM> OR Thumb2 should get
rolled out as a separate <ARCH>.
Not sure I will have time to get into changing <ARCH>, but if there is a
[somewhat] easy fix to add <CPU> to the RTL path for architectures that
support it, I may have time to dig into that.
John
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel