mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 22:29:32 +02:00
* optimized get_caller_addr and get_caller_frame on i8086 by eliminating the stack frame and using si, instead of bp
git-svn-id: trunk@25801 -
This commit is contained in:
parent
aa9fe36fd3
commit
9bf3d1edff
@ -71,12 +71,11 @@ end;
|
|||||||
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
|
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
|
||||||
function get_caller_addr(framebp:pointer;addr:codepointer=nil):codepointer;nostackframe;assembler;
|
function get_caller_addr(framebp:pointer;addr:codepointer=nil):codepointer;nostackframe;assembler;
|
||||||
asm
|
asm
|
||||||
push bp
|
mov si, sp
|
||||||
mov bp, sp
|
|
||||||
{$ifdef FPC_X86_CODE_FAR}
|
{$ifdef FPC_X86_CODE_FAR}
|
||||||
xor dx, dx
|
xor dx, dx
|
||||||
{$endif FPC_X86_CODE_FAR}
|
{$endif FPC_X86_CODE_FAR}
|
||||||
mov ax, ss:[bp + 6 + extra_param_offset + extra_param_offset] // framebp
|
mov ax, ss:[si + 6 + extra_param_offset + extra_param_offset] // framebp
|
||||||
or ax, ax
|
or ax, ax
|
||||||
jz @@Lg_a_null
|
jz @@Lg_a_null
|
||||||
xchg ax, bx
|
xchg ax, bx
|
||||||
@ -86,22 +85,19 @@ asm
|
|||||||
{$endif FPC_X86_CODE_FAR}
|
{$endif FPC_X86_CODE_FAR}
|
||||||
xchg ax, bx
|
xchg ax, bx
|
||||||
@@Lg_a_null:
|
@@Lg_a_null:
|
||||||
pop bp
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
|
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
|
||||||
function get_caller_frame(framebp:pointer;addr:codepointer=nil):pointer;nostackframe;assembler;
|
function get_caller_frame(framebp:pointer;addr:codepointer=nil):pointer;nostackframe;assembler;
|
||||||
asm
|
asm
|
||||||
push bp
|
mov si, sp
|
||||||
mov bp, sp
|
mov ax, ss:[si + 6 + extra_param_offset + extra_param_offset] // framebp
|
||||||
mov ax, ss:[bp + 6 + extra_param_offset + extra_param_offset] // framebp
|
|
||||||
or ax, ax
|
or ax, ax
|
||||||
jz @@Lgnf_null
|
jz @@Lgnf_null
|
||||||
xchg ax, bx
|
xchg ax, bx
|
||||||
mov bx, [bx]
|
mov bx, [bx]
|
||||||
xchg ax, bx
|
xchg ax, bx
|
||||||
@@Lgnf_null:
|
@@Lgnf_null:
|
||||||
pop bp
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{TODO: fix, use smallint?}
|
{TODO: fix, use smallint?}
|
||||||
|
Loading…
Reference in New Issue
Block a user