* 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} 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}

View File

@ -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;