[fpc-devel] ARM-Linux, ARMv5 runtime detection fails
Bernd Mueller
mueller.b at gmx.net
Fri Mar 14 11:47:59 CET 2008
Bernd Mueller wrote:
>
> You chose ldrd r0, [sp] to force the SIGILL on ARMv4. According to the
> docs the load address has to be double word (8 byte) aligned, otherwise
> a Bus Error/Misaligned data access Error on ARMv5 would occur. Is it
> save to use sp in your way?
ok, it does not work. This is what I guessed. But I am in doubt about
your current fix:
asm
bic r0,sp,#7
ldrd r0,[r0]
end;
r0 is double word (8 byte) aligned now, but does it always point to a
valid memory location? IMHO something like that would be better:
procedure fpc_cpucodeinit;
var
qw: QWord;
begin
{$ifdef FPC_SYSTEM_FPC_MOVE}
cpu_has_edsp:=true;
in_edsp_test:=true;
asm
ldrd r0, qw
end;
in_edsp_test:=false;
if cpu_has_edsp then
moveproc:=@move_pld
else
moveproc:=@move_blended;
{$endif FPC_SYSTEM_FPC_MOVE}
end;
It fails too, because qw is not correct aligned (bug/feature), but this
is another question ;-)
Regards, Bernd.
More information about the fpc-devel
mailing list