mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-07 03:27:26 +01:00
+ SPARC: override g_external_wrapper method and emit PIC-safe jump without distance limit. Mantis #25455.
git-svn-id: trunk@26286 -
This commit is contained in:
parent
104cbc0160
commit
890d757573
@ -92,6 +92,7 @@ interface
|
||||
procedure g_concatcopy_unaligned(list : TAsmList;const source,dest : treference;len : tcgint);override;
|
||||
procedure g_concatcopy_move(list : TAsmList;const source,dest : treference;len : tcgint);
|
||||
procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
|
||||
procedure g_external_wrapper(list : TAsmList; procdef: tprocdef; const externalname: string);override;
|
||||
{ Transform unsupported methods into Internal errors }
|
||||
procedure a_bit_scan_reg_reg(list: TAsmList; reverse: boolean; size: TCGSize; src, dst: TRegister); override;
|
||||
procedure g_stackpointer_alloc(list : TAsmList;localsize : longint);override;
|
||||
@ -1577,6 +1578,16 @@ implementation
|
||||
List.concat(Tai_symbol_end.Createname(labelname));
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgsparc.g_external_wrapper(list : TAsmList; procdef: tprocdef; const externalname: string);
|
||||
begin
|
||||
{ CALL overwrites %o7 with its own address, we use delay slot to restore it. }
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,NR_O7,NR_G1));
|
||||
list.concat(taicpu.op_sym(A_CALL,current_asmdata.RefAsmSymbol(externalname)));
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,NR_G1,NR_O7));
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgsparc.g_stackpointer_alloc(list : TAsmList;localsize : longint);
|
||||
begin
|
||||
Comment(V_Error,'tcgsparc.g_stackpointer_alloc method not implemented');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user