* 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:
yury 2007-10-31 23:11:50 +00:00
parent 22c1f6381d
commit 986396545d
2 changed files with 10 additions and 8 deletions

View File

@ -68,7 +68,7 @@ end;
function get_frame:pointer;assembler;nostackframe;{$ifdef SYSTEMINLINE}inline;{$endif}
asm
mov r0,r11
end ['R0'];
end;
{$ENDIF not INTERNAL_BACKTRACE}
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
@ -78,7 +78,7 @@ asm
beq .Lg_a_null
ldr r0,[r0,#-4]
.Lg_a_null:
end ['R0'];
end;
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
@ -88,14 +88,14 @@ asm
beq .Lgnf_null
ldr r0,[r0,#-12]
.Lgnf_null:
end ['R0'];
end;
{$define FPC_SYSTEM_HAS_SPTR}
Function Sptr : pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif}
asm
mov r0,sp
end ['R0'];
end;
{$ifndef FPC_SYSTEM_HAS_FILLCHAR}

View File

@ -14,8 +14,9 @@
**********************************************************************}
{$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
stmfd sp!,{r4,r5,r6,r14}
mov r6,#0
// lo(f1)*lo(f2)
umull r4,r5,r0,r2
@ -32,8 +33,8 @@ asm
mov r1,r5
// no overflow?
beq .Lexit
ldr r2,checkoverflow
// checkoverflow?
ldr r2,[sp,#24]
cmp r2,#0
beq .Lexit
@ -41,6 +42,7 @@ asm
mov r1,fp
bl HandleErrorFrame
.Lexit:
end ['r4','r5','r6'];
ldmfd sp!,{r4,r5,r6,r15}
end;