mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-03 10:49:30 +01:00
* emitpushreferenceaddress gets now the asmlist as parameter
* m68k version compiles with -duseansistrings
This commit is contained in:
parent
8b972b7b6a
commit
6155ef488c
@ -79,7 +79,6 @@ Type
|
||||
|
||||
|
||||
PAsmLabel = ^TAsmLabel;
|
||||
PString = ^String;
|
||||
|
||||
{ Each local label has this structure associated with it }
|
||||
TAsmLabel = record
|
||||
@ -813,7 +812,7 @@ end;
|
||||
stringdispose(operands[k].symbol);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{*************************************************************************}
|
||||
{ Local label utilities }
|
||||
{*************************************************************************}
|
||||
@ -1885,7 +1884,11 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.11 1998-10-13 16:49:59 pierre
|
||||
Revision 1.12 1998-10-14 11:28:13 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.11 1998/10/13 16:49:59 pierre
|
||||
* undid some changes of Peter that made the compiler wrong
|
||||
for m68k (I had to reinsert some ifdefs)
|
||||
* removed several memory leaks under m68k
|
||||
|
||||
@ -278,8 +278,8 @@ implementation
|
||||
pushusedregisters(pushedregs,$ffff);
|
||||
{ WE INVERSE THE PARAMETERS!!! }
|
||||
{ Because parameters are inversed in the rtl }
|
||||
emitpushreferenceaddr(p^.right^.location.reference);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitcall('FPC_STRCONCAT',true);
|
||||
maybe_loadA5;
|
||||
popusedregisters(pushedregs);
|
||||
@ -386,8 +386,8 @@ implementation
|
||||
del_reference(p^.left^.location.reference);
|
||||
del_reference(p^.right^.location.reference);
|
||||
pushusedregisters(pushedregs,$ff);
|
||||
emitpushreferenceaddr(p^.right^.location.reference);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitcall('FPC_SET_COMP_SETS',true);
|
||||
maybe_loada5;
|
||||
popusedregisters(pushedregs);
|
||||
@ -409,22 +409,22 @@ implementation
|
||||
begin
|
||||
loadsetelement(p^.right^.right);
|
||||
loadsetelement(p^.right^.left);
|
||||
emitpushreferenceaddr(href);
|
||||
emitpushreferenceaddr(exprasmlist,href);
|
||||
emitcall('FPC_SET_SET_RANGE',true);
|
||||
end
|
||||
else
|
||||
begin
|
||||
loadsetelement(p^.right^.left);
|
||||
emitpushreferenceaddr(href);
|
||||
emitpushreferenceaddr(exprasmlist,href);
|
||||
emitcall('FPC_SET_SET_BYTE',true);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ must be an other set }
|
||||
emitpushreferenceaddr(href);
|
||||
emitpushreferenceaddr(p^.right^.location.reference);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,href);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitcall('FPC_SET_ADD_SETS',true);
|
||||
end;
|
||||
maybe_loada5;
|
||||
@ -443,9 +443,9 @@ implementation
|
||||
href.symbol:=nil;
|
||||
pushusedregisters(pushedregs,$ff);
|
||||
gettempofsizereference(32,href);
|
||||
emitpushreferenceaddr(href);
|
||||
emitpushreferenceaddr(p^.right^.location.reference);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,href);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
case p^.treetype of
|
||||
subn : emitcall('FPC_SET_SUB_SETS',true);
|
||||
symdifn : emitcall('FPC_SET_SYMDIF_SETS',true);
|
||||
@ -1272,7 +1272,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.10 1998-10-13 16:50:03 pierre
|
||||
Revision 1.11 1998-10-14 11:28:15 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.10 1998/10/13 16:50:03 pierre
|
||||
* undid some changes of Peter that made the compiler wrong
|
||||
for m68k (I had to reinsert some ifdefs)
|
||||
* removed several memory leaks under m68k
|
||||
|
||||
@ -115,7 +115,7 @@ implementation
|
||||
CGMessage(type_e_mismatch)
|
||||
else
|
||||
begin
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
del_reference(p^.left^.location.reference);
|
||||
end;
|
||||
end;
|
||||
@ -128,7 +128,7 @@ implementation
|
||||
CGMessage(cg_e_var_must_be_reference);
|
||||
maybe_push_open_array_high;
|
||||
inc(pushedparasize,4);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
del_reference(p^.left^.location.reference);
|
||||
end
|
||||
else
|
||||
@ -141,7 +141,7 @@ implementation
|
||||
begin
|
||||
maybe_push_open_array_high;
|
||||
inc(pushedparasize,4);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
del_reference(p^.left^.location.reference);
|
||||
end
|
||||
else
|
||||
@ -497,7 +497,7 @@ implementation
|
||||
p^.left:=nil;
|
||||
if ret_in_param(p^.resulttype) then
|
||||
begin
|
||||
emitpushreferenceaddr(funcretref);
|
||||
emitpushreferenceaddr(exprasmlist,funcretref);
|
||||
inc(pushedparasize,4);
|
||||
end;
|
||||
{ overloaded operator have no symtable }
|
||||
@ -1047,7 +1047,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.8 1998-10-13 16:50:04 pierre
|
||||
Revision 1.9 1998-10-14 11:28:16 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.8 1998/10/13 16:50:04 pierre
|
||||
* undid some changes of Peter that made the compiler wrong
|
||||
for m68k (I had to reinsert some ifdefs)
|
||||
* removed several memory leaks under m68k
|
||||
|
||||
@ -514,7 +514,7 @@ implementation
|
||||
case p^.right^.location.loc of
|
||||
LOC_REGISTER,LOC_CREGISTER:
|
||||
begin
|
||||
exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.right^.location.register)));
|
||||
{ !!!!! exprasmlist^.concat(new(pai68k,op_reg(A_PUSH,S_L,p^.right^.location.register))); }
|
||||
ungetregister32(p^.left^.location.register);
|
||||
end;
|
||||
LOC_REFERENCE,LOC_MEM:
|
||||
@ -524,7 +524,7 @@ implementation
|
||||
end;
|
||||
end;
|
||||
emitcall('FPC_ANSI_TO_SHORTSTRING',true);
|
||||
maybe_loadesi;
|
||||
maybe_loada5;
|
||||
popusedregisters(pushed);
|
||||
end;
|
||||
st_longstring:
|
||||
@ -1196,8 +1196,8 @@ implementation
|
||||
href.symbol:=nil;
|
||||
pushusedregisters(pushedregs,$ff);
|
||||
gettempofsizereference(32,href);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(href);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,href);
|
||||
emitcall('FPC_SET_LOAD_SMALL',true);
|
||||
maybe_loada5;
|
||||
popusedregisters(pushedregs);
|
||||
@ -1387,7 +1387,7 @@ implementation
|
||||
exprasmlist^.concat(new(pai68k,op_csymbol_reg(A_MOVE,
|
||||
S_L,newcsymbol(pobjectdef(p^.right^.resulttype)^.vmt_mangledname,0),R_SPPUSH)));
|
||||
concat_external(pobjectdef(p^.right^.resulttype)^.vmt_mangledname,EXT_NEAR);
|
||||
emitpushreferenceaddr(p^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.location.reference);
|
||||
emitcall('FPC_DO_AS',true);
|
||||
popusedregisters(pushed);
|
||||
end;
|
||||
@ -1396,7 +1396,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.8 1998-10-14 10:45:05 pierre
|
||||
Revision 1.9 1998-10-14 11:28:17 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.8 1998/10/14 10:45:05 pierre
|
||||
* ppu problems for m68k fixed (at least in cross compiling)
|
||||
* one last memory leak for sysamiga fixed
|
||||
* the amiga RTL compiles now completely !!
|
||||
|
||||
@ -580,7 +580,7 @@ do_jmp:
|
||||
exit;
|
||||
|
||||
case p^.left^.location.loc of
|
||||
LOC_MEM,LOC_REFERENCE : emitpushreferenceaddr(p^.left^.location.reference);
|
||||
LOC_MEM,LOC_REFERENCE : emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
LOC_CREGISTER,LOC_REGISTER : exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
|
||||
p^.left^.location.register,R_SPPUSH)));
|
||||
else CGMessage(type_e_mismatch);
|
||||
@ -778,7 +778,11 @@ do_jmp:
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.6 1998-10-13 16:50:07 pierre
|
||||
Revision 1.7 1998-10-14 11:28:19 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.6 1998/10/13 16:50:07 pierre
|
||||
* undid some changes of Peter that made the compiler wrong
|
||||
for m68k (I had to reinsert some ifdefs)
|
||||
* removed several memory leaks under m68k
|
||||
|
||||
@ -795,7 +795,7 @@ implementation
|
||||
exprasmlist^.concat(new(pai68k,op_const_reg(A_MOVE,S_L,
|
||||
pfiledef(p^.left^.resulttype)^.typed_as^.size,R_SPPUSH)));
|
||||
secondload(p^.left);
|
||||
emitpushreferenceaddr(p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
if p^.inlinenumber=in_reset_typedfile then
|
||||
emitcall('FPC_RESET_TYPED',true)
|
||||
else
|
||||
@ -890,7 +890,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.8 1998-10-14 08:08:52 pierre
|
||||
Revision 1.9 1998-10-14 11:28:20 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.8 1998/10/14 08:08:52 pierre
|
||||
* following Peters remark, removed all ifdef in
|
||||
the systems unit enums
|
||||
* last bugs of cg68k removed for sysamiga
|
||||
|
||||
@ -138,7 +138,8 @@ implementation
|
||||
case p^.left^.location.loc of
|
||||
LOC_CREGISTER : exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
|
||||
p^.left^.location.register,R_SPPUSH)));
|
||||
LOC_REFERENCE : emitpushreferenceaddr(p^.left^.location.reference);
|
||||
LOC_REFERENCE:
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
|
||||
end;
|
||||
|
||||
@ -688,7 +689,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.7 1998-10-14 08:08:54 pierre
|
||||
Revision 1.8 1998-10-14 11:28:21 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.7 1998/10/14 08:08:54 pierre
|
||||
* following Peters remark, removed all ifdef in
|
||||
the systems unit enums
|
||||
* last bugs of cg68k removed for sysamiga
|
||||
|
||||
@ -41,7 +41,7 @@ unit cga68k;
|
||||
function maybe_push(needed : byte;p : ptree) : boolean;
|
||||
procedure restore(p : ptree);
|
||||
procedure emit_push_mem(const ref : treference);
|
||||
procedure emitpushreferenceaddr(const ref : treference);
|
||||
procedure emitpushreferenceaddr(list : paasmoutput;const ref : treference);
|
||||
procedure copystring(const dref,sref : treference;len : byte);
|
||||
procedure concatcopy(source,dest : treference;size : longint;delsource : boolean);
|
||||
{ see implementation }
|
||||
@ -431,7 +431,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
|
||||
|
||||
|
||||
{ USES REGISTER R_A1 }
|
||||
procedure emitpushreferenceaddr(const ref : treference);
|
||||
procedure emitpushreferenceaddr(list : paasmoutput;const ref : treference);
|
||||
{ Push a pointer to a value on the stack }
|
||||
begin
|
||||
if ref.isintvalue then
|
||||
@ -439,19 +439,19 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
|
||||
else
|
||||
begin
|
||||
if (ref.base=R_NO) and (ref.index=R_NO) then
|
||||
exprasmlist^.concat(new(pai68k,op_ref(A_PEA,S_L,
|
||||
list^.concat(new(pai68k,op_ref(A_PEA,S_L,
|
||||
newreference(ref))))
|
||||
else if (ref.base=R_NO) and (ref.index<>R_NO) and
|
||||
(ref.offset=0) and (ref.scalefactor=0) and (ref.symbol=nil) then
|
||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
|
||||
list^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
|
||||
ref.index,R_SPPUSH)))
|
||||
else if (ref.base<>R_NO) and (ref.index=R_NO) and
|
||||
(ref.offset=0) and (ref.symbol=nil) then
|
||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,ref.base,R_SPPUSH)))
|
||||
list^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,ref.base,R_SPPUSH)))
|
||||
else
|
||||
begin
|
||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_LEA,S_L,newreference(ref),R_A1)));
|
||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,R_A1,R_SPPUSH)));
|
||||
list^.concat(new(pai68k,op_ref_reg(A_LEA,S_L,newreference(ref),R_A1)));
|
||||
list^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,R_A1,R_SPPUSH)));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -1344,7 +1344,11 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.22 1998-10-13 16:50:12 pierre
|
||||
Revision 1.23 1998-10-14 11:28:22 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.22 1998/10/13 16:50:12 pierre
|
||||
* undid some changes of Peter that made the compiler wrong
|
||||
for m68k (I had to reinsert some ifdefs)
|
||||
* removed several memory leaks under m68k
|
||||
|
||||
@ -151,8 +151,10 @@ uses
|
||||
{$O messages}
|
||||
{$O gendef}
|
||||
{$O import}
|
||||
{$ifdef i386}
|
||||
{$O os2_targ}
|
||||
{$O win_targ}
|
||||
{$endif i386}
|
||||
{$O asmutils}
|
||||
{$ifdef gdb}
|
||||
{$O gdb}
|
||||
@ -261,7 +263,11 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.33 1998-10-08 17:17:26 pierre
|
||||
Revision 1.34 1998-10-14 11:28:24 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.33 1998/10/08 17:17:26 pierre
|
||||
* current_module old scanner tagged as invalid if unit is recompiled
|
||||
+ added ppheap for better info on tracegetmem of heaptrc
|
||||
(adds line column and file index)
|
||||
|
||||
@ -208,7 +208,7 @@ implementation
|
||||
os_infos : array[1..oscnt] of tosinfo = (
|
||||
(
|
||||
id : os_none;
|
||||
name : 'No operating system';
|
||||
name : 'No operating system'
|
||||
),
|
||||
(
|
||||
id : os_i386_go32v1;
|
||||
@ -500,7 +500,7 @@ implementation
|
||||
****************************************************************************}
|
||||
link_infos : array[1..linkcnt] of tlinkinfo = (
|
||||
(
|
||||
id : link_none;
|
||||
id : link_none
|
||||
)
|
||||
{$ifdef i386}
|
||||
,(
|
||||
@ -603,7 +603,7 @@ implementation
|
||||
****************************************************************************}
|
||||
ar_infos : array[1..arcnt] of tarinfo = (
|
||||
(
|
||||
id : ar_none;
|
||||
id : ar_none
|
||||
)
|
||||
{$ifdef i386}
|
||||
,(
|
||||
@ -1130,7 +1130,11 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.43 1998-10-14 08:08:56 pierre
|
||||
Revision 1.44 1998-10-14 11:28:25 florian
|
||||
* emitpushreferenceaddress gets now the asmlist as parameter
|
||||
* m68k version compiles with -duseansistrings
|
||||
|
||||
Revision 1.43 1998/10/14 08:08:56 pierre
|
||||
* following Peters remark, removed all ifdef in
|
||||
the systems unit enums
|
||||
* last bugs of cg68k removed for sysamiga
|
||||
|
||||
Loading…
Reference in New Issue
Block a user