mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-27 08:31:33 +01:00
* fix call to handleerror for regcall
This commit is contained in:
parent
c1a25f53b6
commit
0105b62700
@ -20,7 +20,7 @@
|
|||||||
function fpc_div_qword(n,z : qword) : qword;assembler;[public,alias: 'FPC_DIV_QWORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
|
function fpc_div_qword(n,z : qword) : qword;assembler;[public,alias: 'FPC_DIV_QWORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
|
||||||
var
|
var
|
||||||
shift,lzz,lzn : longint;
|
shift,lzz,lzn : longint;
|
||||||
saveebx,saveedi : longint;
|
saveebx,saveedi : longint;
|
||||||
asm
|
asm
|
||||||
movl %ebx,saveebx
|
movl %ebx,saveebx
|
||||||
movl %edi,saveedi
|
movl %edi,saveedi
|
||||||
@ -28,13 +28,18 @@
|
|||||||
{ AMD Athlon Processor x86 Code Optimization manual }
|
{ AMD Athlon Processor x86 Code Optimization manual }
|
||||||
movl n+4,%ecx
|
movl n+4,%ecx
|
||||||
movl n,%ebx
|
movl n,%ebx
|
||||||
movl %ecx,%eax
|
movl %ecx,%eax
|
||||||
orl %ebx,%eax
|
orl %ebx,%eax
|
||||||
jnz .Lnodivzero
|
jnz .Lnodivzero
|
||||||
pushl %ebp
|
{$ifdef REGCALL}
|
||||||
pushl $200
|
movl %ebp,%edx
|
||||||
call HandleErrorFrame
|
movl $200,%eax
|
||||||
jmp .Lexit
|
{$else}
|
||||||
|
pushl %ebp
|
||||||
|
pushl $200
|
||||||
|
{$endif}
|
||||||
|
call HandleErrorFrame
|
||||||
|
jmp .Lexit
|
||||||
.Lnodivzero:
|
.Lnodivzero:
|
||||||
movl z+4,%edx
|
movl z+4,%edx
|
||||||
movl z,%eax
|
movl z,%eax
|
||||||
@ -44,7 +49,7 @@
|
|||||||
jae .Lqworddivtwo_divs
|
jae .Lqworddivtwo_divs
|
||||||
divl %ebx
|
divl %ebx
|
||||||
movl %ecx,%edx
|
movl %ecx,%edx
|
||||||
jmp .Lexit
|
jmp .Lexit
|
||||||
|
|
||||||
.Lqworddivtwo_divs:
|
.Lqworddivtwo_divs:
|
||||||
movl %eax,%ecx
|
movl %eax,%ecx
|
||||||
@ -54,7 +59,7 @@
|
|||||||
xchgl %ecx,%eax
|
xchgl %ecx,%eax
|
||||||
divl %ebx
|
divl %ebx
|
||||||
movl %ecx,%edx
|
movl %ecx,%edx
|
||||||
jmp .Lexit
|
jmp .Lexit
|
||||||
|
|
||||||
.Lqworddivbigdivisor:
|
.Lqworddivbigdivisor:
|
||||||
movl %ecx,%edi
|
movl %ecx,%edi
|
||||||
@ -92,7 +97,7 @@
|
|||||||
function fpc_mod_qword(n,z : qword) : qword;[public,alias: 'FPC_MOD_QWORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
|
function fpc_mod_qword(n,z : qword) : qword;[public,alias: 'FPC_MOD_QWORD']; {$ifdef hascompilerproc} compilerproc; {$endif}
|
||||||
var
|
var
|
||||||
shift,lzz,lzn : longint;
|
shift,lzz,lzn : longint;
|
||||||
saveebx,saveedi : longint;
|
saveebx,saveedi : longint;
|
||||||
asm
|
asm
|
||||||
movl %ebx,saveebx
|
movl %ebx,saveebx
|
||||||
movl %edi,saveedi
|
movl %edi,saveedi
|
||||||
@ -100,13 +105,13 @@
|
|||||||
{ AMD Athlon Processor x86 Code Optimization manual }
|
{ AMD Athlon Processor x86 Code Optimization manual }
|
||||||
movl n+4,%ecx
|
movl n+4,%ecx
|
||||||
movl n,%ebx
|
movl n,%ebx
|
||||||
movl %ecx,%eax
|
movl %ecx,%eax
|
||||||
orl %ebx,%eax
|
orl %ebx,%eax
|
||||||
jnz .Lnodivzero
|
jnz .Lnodivzero
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
pushl $200
|
pushl $200
|
||||||
call HandleErrorFrame
|
call HandleErrorFrame
|
||||||
jmp .Lexit
|
jmp .Lexit
|
||||||
movl z+4,%edx
|
movl z+4,%edx
|
||||||
movl z,%eax
|
movl z,%eax
|
||||||
testl %ecx,%ecx
|
testl %ecx,%ecx
|
||||||
@ -116,7 +121,7 @@
|
|||||||
divl %ebx
|
divl %ebx
|
||||||
movl %edx,%eax
|
movl %edx,%eax
|
||||||
movl %ecx,%edx
|
movl %ecx,%edx
|
||||||
jmp .Lexit
|
jmp .Lexit
|
||||||
|
|
||||||
.Lqwordmodr_two_divs:
|
.Lqwordmodr_two_divs:
|
||||||
movl %eax,%ecx
|
movl %eax,%ecx
|
||||||
@ -127,7 +132,7 @@
|
|||||||
divl %ebx
|
divl %ebx
|
||||||
movl %edx,%eax
|
movl %edx,%eax
|
||||||
xorl %edx,%edx
|
xorl %edx,%edx
|
||||||
jmp .Lexit
|
jmp .Lexit
|
||||||
|
|
||||||
.Lqwordmodr_big_divisior:
|
.Lqwordmodr_big_divisior:
|
||||||
movl %ecx,%edi
|
movl %ecx,%edi
|
||||||
@ -226,7 +231,10 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.1 2003-09-14 11:34:13 peter
|
Revision 1.2 2003-12-23 23:09:43 peter
|
||||||
|
* fix call to handleerror for regcall
|
||||||
|
|
||||||
|
Revision 1.1 2003/09/14 11:34:13 peter
|
||||||
* moved int64 asm code to int64p.inc
|
* moved int64 asm code to int64p.inc
|
||||||
* save ebx,esi
|
* save ebx,esi
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user