* fixed compilation after addition of support for weak symbols

git-svn-id: trunk@12716 -
This commit is contained in:
Jonas Maebe 2009-02-08 10:21:17 +00:00
parent 9b790edd4f
commit a4cc881693
2 changed files with 26 additions and 20 deletions

View File

@ -48,7 +48,7 @@ unit cgcpu;
procedure a_param_ref(list : TAsmList;size : tcgsize;const r : treference;const cgpara : tcgpara);override;
procedure a_paramaddr_ref(list : TAsmList;const r : treference;const cgpara : tcgpara);override;
procedure a_call_name(list : TAsmList;const s : string);override;
procedure a_call_name(list : TAsmList;const s : string; weak: boolean);override;
procedure a_call_reg(list : TAsmList;reg : tregister);override;
procedure a_load_const_reg(list : TAsmList;size : tcgsize;a : aint;register : tregister);override;
@ -451,9 +451,15 @@ unit cgcpu;
procedure tcg68k.a_call_name(list : TAsmList;const s : string);
procedure tcg68k.a_call_name(list : TAsmList;const s : string; weak: boolean);
var
sym: tasmsymbol;
begin
if not(weak) then
sym:=current_asmdata.RefAsmSymbol(s)
else
sym:=current_asmdata.WeakRefAsmSymbol(s);
list.concat(taicpu.op_sym(A_JSR,S_NO,current_asmdata.RefAsmSymbol(s)));
end;
@ -709,7 +715,7 @@ unit cgcpu;
cg.getcpuregister(list,NR_D1);
list.concat(taicpu.op_const_reg(A_MOVE,S_L,a, r));
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg, r2));
cg.a_call_name(list,'FPC_MUL_LONGINT');
cg.a_call_name(list,'FPC_MUL_LONGINT',false);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,r, reg));
cg.ungetcpuregister(list,r);
cg.ungetcpuregister(list,r2);
@ -738,7 +744,7 @@ unit cgcpu;
cg.getcpuregister(list,NR_D1);
list.concat(taicpu.op_const_reg(A_MOVE,S_L,a, r));
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg, r2));
cg.a_call_name(list,'FPC_MUL_LONGWORD');
cg.a_call_name(list,'FPC_MUL_LONGWORD',false);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,r, reg));
cg.ungetcpuregister(list,r);
cg.ungetcpuregister(list,r2);
@ -921,7 +927,7 @@ unit cgcpu;
cg.getcpuregister(list,NR_D1);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg1, r));
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg2, r2));
cg.a_call_name(list,'FPC_MUL_LONGINT');
cg.a_call_name(list,'FPC_MUL_LONGINT',false);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,r, reg2));
cg.ungetcpuregister(list,r);
cg.ungetcpuregister(list,r2);
@ -964,7 +970,7 @@ unit cgcpu;
cg.getcpuregister(list,NR_D1);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg1, r));
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,reg2, r2));
cg.a_call_name(list,'FPC_MUL_LONGWORD');
cg.a_call_name(list,'FPC_MUL_LONGWORD',false);
list.concat(taicpu.op_reg_reg(A_MOVE,S_L,r, reg2));
cg.ungetcpuregister(list,r);
cg.ungetcpuregister(list,r2);
@ -1217,10 +1223,10 @@ unit cgcpu;
iregister:=getaddressregister(list);
jregister:=getaddressregister(list);
{ reference for move (An)+,(An)+ }
reference_reset(hp1);
reference_reset(hp1,source.alignment);
hp1.base := iregister; { source register }
hp1.direction := dir_inc;
reference_reset(hp2);
reference_reset(hp2,dest.alignment);
hp2.base := jregister;
hp2.direction := dir_inc;
{ iregister = source }
@ -1300,7 +1306,7 @@ unit cgcpu;
{$ifdef DEBUG_CHARLIE}
// writeln('proc entry, localsize:',localsize);
{$endif DEBUG_CHARLIE}
if not nostackframe then
begin
if localsize<>0 then
@ -1308,7 +1314,7 @@ unit cgcpu;
{ size can't be negative }
if (localsize < 0) then
internalerror(2006122601);
{ Not to complicate the code generator too much, and since some }
{ of the systems only support this format, the localsize cannot }
{ exceed 32K in size. }
@ -1320,17 +1326,17 @@ unit cgcpu;
else
begin
list.concat(taicpu.op_reg_const(A_LINK,S_W,NR_FRAME_POINTER_REG,0));
(*
(*
{ FIXME! - Carl's original code uses this method. However,
according to the 68060 users manual, a LINK is faster than
two moves. So, use a link in #0 case too, for now. I'm not
really sure tho', that LINK supports #0 disposition, but i
see no reason why it shouldn't support it. (KB) }
{ when localsize = 0, use two moves, instead of link }
r:=NR_FRAME_POINTER_REG;
rsp:=NR_STACK_POINTER_REG;
reference_reset_base(ref,NR_STACK_POINTER_REG,0);
ref.direction:=dir_dec;
list.concat(taicpu.op_reg_ref(A_MOVE,S_L,r,ref));

View File

@ -154,7 +154,7 @@ implementation
// paraloc1.init;
// cg.a_param_const(current_asmdata.CurrAsmList,OS_S32,200,paramanager.getintparaloc(pocall_default,1,paraloc1));
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR');
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR',false);
cg.a_label(current_asmdata.CurrAsmList, continuelabel);
if signed then
current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg(A_DIVS,S_L,denum,num))
@ -175,9 +175,9 @@ implementation
{ put denum in D1 }
cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_INT,OS_INT,denum,reg_d1);
if signed then
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_DIV_LONGINT')
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_DIV_LONGINT',false)
else
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_DIV_CARDINAL');
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_DIV_CARDINAL',false);
cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_INT,OS_INT,reg_d0,denum);
cg.ungetcpuregister(current_asmdata.CurrAsmList,reg_d0);
cg.ungetcpuregister(current_asmdata.CurrAsmList,reg_d1);
@ -200,7 +200,7 @@ implementation
{ compare against zero, if not zero continue }
cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,OS_S32,OC_NE,0,denum,continuelabel);
// cg.a_param_const(current_asmdata.CurrAsmList, OS_S32,200,paramanager.getintparaloc(pocall_default,1));
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR');
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR',false);
cg.a_label(current_asmdata.CurrAsmList, continuelabel);
tmpreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_INT);
@ -238,9 +238,9 @@ implementation
{ put denum in D1 }
cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_INT,OS_INT,denum,Reg_D1);
if signed then
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_MOD_LONGINT')
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_MOD_LONGINT',false)
else
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_MOD_CARDINAL');
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_MOD_CARDINAL',false);
cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_INT,OS_INT,Reg_D0,denum);
cg.ungetcpuregister(current_asmdata.CurrAsmList,Reg_D0);
cg.ungetcpuregister(current_asmdata.CurrAsmList,Reg_D1);