mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-13 16:38:18 +02:00
* loadfpu_reg_reg size specifier
This commit is contained in:
parent
821c5f0f27
commit
390db181c1
@ -49,7 +49,6 @@ unit cgx86;
|
|||||||
procedure a_param_ref(list : taasmoutput;size : tcgsize;const r : treference;const locpara : tparalocation);override;
|
procedure a_param_ref(list : taasmoutput;size : tcgsize;const r : treference;const locpara : tparalocation);override;
|
||||||
procedure a_paramaddr_ref(list : taasmoutput;const r : treference;const locpara : tparalocation);override;
|
procedure a_paramaddr_ref(list : taasmoutput;const r : treference;const locpara : tparalocation);override;
|
||||||
|
|
||||||
|
|
||||||
procedure a_call_name(list : taasmoutput;const s : string);override;
|
procedure a_call_name(list : taasmoutput;const s : string);override;
|
||||||
procedure a_call_ref(list : taasmoutput;const ref : treference);override;
|
procedure a_call_ref(list : taasmoutput;const ref : treference);override;
|
||||||
procedure a_call_reg(list : taasmoutput;reg : tregister);override;
|
procedure a_call_reg(list : taasmoutput;reg : tregister);override;
|
||||||
@ -75,7 +74,7 @@ unit cgx86;
|
|||||||
procedure a_loadaddr_ref_reg(list : taasmoutput;const ref : treference;r : tregister);override;
|
procedure a_loadaddr_ref_reg(list : taasmoutput;const ref : treference;r : tregister);override;
|
||||||
|
|
||||||
{ fpu move instructions }
|
{ fpu move instructions }
|
||||||
procedure a_loadfpu_reg_reg(list: taasmoutput; reg1, reg2: tregister); override;
|
procedure a_loadfpu_reg_reg(list: taasmoutput; size: tcgsize; reg1, reg2: tregister); override;
|
||||||
procedure a_loadfpu_ref_reg(list: taasmoutput; size: tcgsize; const ref: treference; reg: tregister); override;
|
procedure a_loadfpu_ref_reg(list: taasmoutput; size: tcgsize; const ref: treference; reg: tregister); override;
|
||||||
procedure a_loadfpu_reg_ref(list: taasmoutput; size: tcgsize; reg: tregister; const ref: treference); override;
|
procedure a_loadfpu_reg_ref(list: taasmoutput; size: tcgsize; reg: tregister; const ref: treference); override;
|
||||||
|
|
||||||
@ -426,11 +425,9 @@ unit cgx86;
|
|||||||
|
|
||||||
|
|
||||||
procedure tcgx86.a_paramaddr_ref(list : taasmoutput;const r : treference;const locpara : tparalocation);
|
procedure tcgx86.a_paramaddr_ref(list : taasmoutput;const r : treference;const locpara : tparalocation);
|
||||||
|
|
||||||
var
|
var
|
||||||
tmpreg: tregister;
|
tmpreg: tregister;
|
||||||
baseno,indexno:boolean;
|
baseno,indexno:boolean;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if not((r.segment.enum=R_NO) or ((r.segment.enum=R_INTREGISTER) and (r.segment.number=NR_NO))) then
|
if not((r.segment.enum=R_NO) or ((r.segment.enum=R_INTREGISTER) and (r.segment.number=NR_NO))) then
|
||||||
CGMessage(cg_e_cant_use_far_pointer_there);
|
CGMessage(cg_e_cant_use_far_pointer_there);
|
||||||
@ -466,14 +463,14 @@ unit cgx86;
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure tcgx86.a_call_name(list : taasmoutput;const s : string);
|
|
||||||
|
|
||||||
|
procedure tcgx86.a_call_name(list : taasmoutput;const s : string);
|
||||||
begin
|
begin
|
||||||
list.concat(taicpu.op_sym(A_CALL,S_NO,objectlibrary.newasmsymbol(s)));
|
list.concat(taicpu.op_sym(A_CALL,S_NO,objectlibrary.newasmsymbol(s)));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure tcgx86.a_call_ref(list : taasmoutput;const ref : treference);
|
|
||||||
|
|
||||||
|
procedure tcgx86.a_call_ref(list : taasmoutput;const ref : treference);
|
||||||
begin
|
begin
|
||||||
list.concat(taicpu.op_ref(A_CALL,S_NO,ref));
|
list.concat(taicpu.op_ref(A_CALL,S_NO,ref));
|
||||||
end;
|
end;
|
||||||
@ -575,7 +572,7 @@ unit cgx86;
|
|||||||
|
|
||||||
{ all fpu load routines expect that R_ST[0-7] means an fpu regvar and }
|
{ all fpu load routines expect that R_ST[0-7] means an fpu regvar and }
|
||||||
{ R_ST means "the current value at the top of the fpu stack" (JM) }
|
{ R_ST means "the current value at the top of the fpu stack" (JM) }
|
||||||
procedure tcgx86.a_loadfpu_reg_reg(list: taasmoutput; reg1, reg2: tregister);
|
procedure tcgx86.a_loadfpu_reg_reg(list: taasmoutput; size: tcgsize; reg1, reg2: tregister);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if (reg1.enum <> R_ST) then
|
if (reg1.enum <> R_ST) then
|
||||||
@ -603,7 +600,7 @@ unit cgx86;
|
|||||||
if reg.enum>lastreg then
|
if reg.enum>lastreg then
|
||||||
internalerror(200301081);
|
internalerror(200301081);
|
||||||
if (reg.enum <> R_ST) then
|
if (reg.enum <> R_ST) then
|
||||||
a_loadfpu_reg_reg(list,rst,reg);
|
a_loadfpu_reg_reg(list,size,rst,reg);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -616,7 +613,7 @@ unit cgx86;
|
|||||||
if reg.enum>lastreg then
|
if reg.enum>lastreg then
|
||||||
internalerror(200301081);
|
internalerror(200301081);
|
||||||
if reg.enum <> R_ST then
|
if reg.enum <> R_ST then
|
||||||
a_loadfpu_reg_reg(list,reg,rst);
|
a_loadfpu_reg_reg(list,size,reg,rst);
|
||||||
floatstore(list,size,ref);
|
floatstore(list,size,ref);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1935,7 +1932,10 @@ unit cgx86;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.56 2003-06-14 14:53:50 jonas
|
Revision 1.57 2003-07-03 18:59:25 peter
|
||||||
|
* loadfpu_reg_reg size specifier
|
||||||
|
|
||||||
|
Revision 1.56 2003/06/14 14:53:50 jonas
|
||||||
* fixed newra cycle for x86
|
* fixed newra cycle for x86
|
||||||
* added constants for indicating source and destination operands of the
|
* added constants for indicating source and destination operands of the
|
||||||
"move reg,reg" instruction to aasmcpu (and use those in rgobj)
|
"move reg,reg" instruction to aasmcpu (and use those in rgobj)
|
||||||
|
Loading…
Reference in New Issue
Block a user