mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-02 03:10:47 +02:00
* Fixed register saving in fpc_mul_qword for arm. It fixed bug #10017.
* Removed unneeded register lists for some pure asm routines for arm. git-svn-id: trunk@9019 -
This commit is contained in:
parent
22c1f6381d
commit
986396545d
@ -68,7 +68,7 @@ end;
|
|||||||
function get_frame:pointer;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
|
function get_frame:pointer;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
asm
|
asm
|
||||||
mov r0,r11
|
mov r0,r11
|
||||||
end ['R0'];
|
end;
|
||||||
{$ENDIF not INTERNAL_BACKTRACE}
|
{$ENDIF not INTERNAL_BACKTRACE}
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
|
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
|
||||||
@ -78,7 +78,7 @@ asm
|
|||||||
beq .Lg_a_null
|
beq .Lg_a_null
|
||||||
ldr r0,[r0,#-4]
|
ldr r0,[r0,#-4]
|
||||||
.Lg_a_null:
|
.Lg_a_null:
|
||||||
end ['R0'];
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
|
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
|
||||||
@ -88,14 +88,14 @@ asm
|
|||||||
beq .Lgnf_null
|
beq .Lgnf_null
|
||||||
ldr r0,[r0,#-12]
|
ldr r0,[r0,#-12]
|
||||||
.Lgnf_null:
|
.Lgnf_null:
|
||||||
end ['R0'];
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_SPTR}
|
{$define FPC_SYSTEM_HAS_SPTR}
|
||||||
Function Sptr : pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif}
|
Function Sptr : pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||||
asm
|
asm
|
||||||
mov r0,sp
|
mov r0,sp
|
||||||
end ['R0'];
|
end;
|
||||||
|
|
||||||
|
|
||||||
{$ifndef FPC_SYSTEM_HAS_FILLCHAR}
|
{$ifndef FPC_SYSTEM_HAS_FILLCHAR}
|
||||||
|
@ -14,8 +14,9 @@
|
|||||||
**********************************************************************}
|
**********************************************************************}
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_MUL_QWORD}
|
{$define FPC_SYSTEM_HAS_MUL_QWORD}
|
||||||
function fpc_mul_qword(f1,f2 : qword;checkoverflow : longbool) : qword;assembler;[public,alias: 'FPC_MUL_QWORD']; compilerproc;
|
function fpc_mul_qword(f1,f2 : qword;checkoverflow : longbool) : qword;assembler;nostackframe;[public,alias: 'FPC_MUL_QWORD']; compilerproc;
|
||||||
asm
|
asm
|
||||||
|
stmfd sp!,{r4,r5,r6,r14}
|
||||||
mov r6,#0
|
mov r6,#0
|
||||||
// lo(f1)*lo(f2)
|
// lo(f1)*lo(f2)
|
||||||
umull r4,r5,r0,r2
|
umull r4,r5,r0,r2
|
||||||
@ -32,8 +33,8 @@ asm
|
|||||||
mov r1,r5
|
mov r1,r5
|
||||||
// no overflow?
|
// no overflow?
|
||||||
beq .Lexit
|
beq .Lexit
|
||||||
|
// checkoverflow?
|
||||||
ldr r2,checkoverflow
|
ldr r2,[sp,#24]
|
||||||
cmp r2,#0
|
cmp r2,#0
|
||||||
beq .Lexit
|
beq .Lexit
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ asm
|
|||||||
mov r1,fp
|
mov r1,fp
|
||||||
bl HandleErrorFrame
|
bl HandleErrorFrame
|
||||||
.Lexit:
|
.Lexit:
|
||||||
end ['r4','r5','r6'];
|
ldmfd sp!,{r4,r5,r6,r15}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user