mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-08 12:39:39 +02:00
* floating compares fixed
* unary minus for floats fixed
This commit is contained in:
parent
5fe2004441
commit
a50e082468
@ -62,7 +62,7 @@ unit cpubase;
|
|||||||
A_ADF,A_DVF,A_FDV,A_FML,A_FRD,A_MUF,A_POL,A_PW,A_RDF,
|
A_ADF,A_DVF,A_FDV,A_FML,A_FRD,A_MUF,A_POL,A_PW,A_RDF,
|
||||||
A_RMF,A_RPW,A_RSF,A_SUF,A_ABS,A_ACS,A_ASN,A_ATN,A_COS,
|
A_RMF,A_RPW,A_RSF,A_SUF,A_ABS,A_ACS,A_ASN,A_ATN,A_COS,
|
||||||
A_EXP,A_LOG,A_LGN,A_MVF,A_MNF,A_NRM,A_RND,A_SIN,A_SQT,A_TAN,A_URD,
|
A_EXP,A_LOG,A_LGN,A_MVF,A_MNF,A_NRM,A_RND,A_SIN,A_SQT,A_TAN,A_URD,
|
||||||
A_CMF,A_CNF
|
A_CMF,A_CMFE,A_CNF
|
||||||
{ VPA coprocessor codes }
|
{ VPA coprocessor codes }
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -570,7 +570,11 @@ unit cpubase;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.27 2004-03-06 20:35:19 florian
|
Revision 1.28 2004-03-13 18:45:40 florian
|
||||||
|
* floating compares fixed
|
||||||
|
* unary minus for floats fixed
|
||||||
|
|
||||||
|
Revision 1.27 2004/03/06 20:35:19 florian
|
||||||
* fixed arm compilation
|
* fixed arm compilation
|
||||||
* cleaned up code generation for exported linux procedures
|
* cleaned up code generation for exported linux procedures
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ interface
|
|||||||
'adf','dvf','fdv','fml','frd','muf','pol','pw','rdf',
|
'adf','dvf','fdv','fml','frd','muf','pol','pw','rdf',
|
||||||
'rmf','rpw','rsf','suf','abs','acs','asn','atn','cos',
|
'rmf','rpw','rsf','suf','abs','acs','asn','atn','cos',
|
||||||
'exp','log','lgn','mvf','mnf','nrm','rnd','sin','sqt','tan','urd',
|
'exp','log','lgn','mvf','mnf','nrm','rnd','sin','sqt','tan','urd',
|
||||||
'cmf','cnf'
|
'cmf','cmfe','cnf'
|
||||||
{ VPA coprocessor codes }
|
{ VPA coprocessor codes }
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -113,7 +113,11 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.2 2003-11-17 23:23:47 florian
|
Revision 1.3 2004-03-13 18:45:40 florian
|
||||||
|
* floating compares fixed
|
||||||
|
* unary minus for floats fixed
|
||||||
|
|
||||||
|
Revision 1.2 2003/11/17 23:23:47 florian
|
||||||
+ first part of arm assembler reader
|
+ first part of arm assembler reader
|
||||||
|
|
||||||
Revision 1.1 2003/11/12 16:05:39 florian
|
Revision 1.1 2003/11/12 16:05:39 florian
|
||||||
|
@ -122,7 +122,6 @@ interface
|
|||||||
procedure tarmaddnode.second_addfloat;
|
procedure tarmaddnode.second_addfloat;
|
||||||
var
|
var
|
||||||
op : TAsmOp;
|
op : TAsmOp;
|
||||||
instr : taicpu;
|
|
||||||
begin
|
begin
|
||||||
case aktfputype of
|
case aktfputype of
|
||||||
fpu_fpa,
|
fpu_fpa,
|
||||||
@ -157,10 +156,9 @@ interface
|
|||||||
else
|
else
|
||||||
location.register:=right.location.register;
|
location.register:=right.location.register;
|
||||||
|
|
||||||
instr:=taicpu.op_reg_reg_reg(op,
|
exprasmlist.concat(setoppostfix(taicpu.op_reg_reg_reg(op,
|
||||||
location.register,left.location.register,right.location.register);
|
location.register,left.location.register,right.location.register),
|
||||||
instr.oppostfix:=cgsize2fpuoppostfix[def_cgsize(resulttype.def)];
|
cgsize2fpuoppostfix[def_cgsize(resulttype.def)]));
|
||||||
exprasmlist.concat(instr);
|
|
||||||
|
|
||||||
release_reg_left_right;
|
release_reg_left_right;
|
||||||
|
|
||||||
@ -189,12 +187,18 @@ interface
|
|||||||
location_reset(location,LOC_FLAGS,OS_NO);
|
location_reset(location,LOC_FLAGS,OS_NO);
|
||||||
location.resflags:=getresflags(true);
|
location.resflags:=getresflags(true);
|
||||||
|
|
||||||
exprasmlist.concat(taicpu.op_reg_reg(A_CMF,
|
if nodetype in [equaln,unequaln] then
|
||||||
left.location.register,right.location.register));
|
exprasmlist.concat(setoppostfix(taicpu.op_reg_reg(A_CMF,
|
||||||
|
left.location.register,right.location.register),
|
||||||
|
cgsize2fpuoppostfix[def_cgsize(resulttype.def)]))
|
||||||
|
else
|
||||||
|
exprasmlist.concat(setoppostfix(taicpu.op_reg_reg(A_CMFE,
|
||||||
|
left.location.register,right.location.register),
|
||||||
|
cgsize2fpuoppostfix[def_cgsize(resulttype.def)]));
|
||||||
|
|
||||||
release_reg_left_right;
|
release_reg_left_right;
|
||||||
location_reset(location,LOC_FLAGS,OS_NO);
|
location_reset(location,LOC_FLAGS,OS_NO);
|
||||||
location.resflags:=getresflags(true);
|
location.resflags:=getresflags(false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -339,7 +343,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.12 2004-03-11 22:41:37 florian
|
Revision 1.13 2004-03-13 18:45:40 florian
|
||||||
|
* floating compares fixed
|
||||||
|
* unary minus for floats fixed
|
||||||
|
|
||||||
|
Revision 1.12 2004/03/11 22:41:37 florian
|
||||||
+ second_cmpfloat implemented, needs probably to be fixed
|
+ second_cmpfloat implemented, needs probably to be fixed
|
||||||
|
|
||||||
Revision 1.11 2004/01/26 19:05:56 florian
|
Revision 1.11 2004/01/26 19:05:56 florian
|
||||||
|
@ -31,9 +31,15 @@ interface
|
|||||||
|
|
||||||
type
|
type
|
||||||
tarmnotnode = class(tcgnotnode)
|
tarmnotnode = class(tcgnotnode)
|
||||||
procedure second_boolean;override;
|
procedure second_boolean;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
tarmunaryminusnode = class(tcgunaryminusnode)
|
||||||
|
procedure second_float;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
@ -94,13 +100,33 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{*****************************************************************************
|
||||||
|
TARMUNARYMINUSNODE
|
||||||
|
*****************************************************************************}
|
||||||
|
|
||||||
|
procedure tarmunaryminusnode.second_float;
|
||||||
|
begin
|
||||||
|
secondpass(left);
|
||||||
|
location_reset(location,LOC_FPUREGISTER,def_cgsize(resulttype.def));
|
||||||
|
location_force_fpureg(exprasmlist,left.location,false);
|
||||||
|
location:=left.location;
|
||||||
|
exprasmlist.concat(setoppostfix(taicpu.op_reg_reg_const(A_RSF,
|
||||||
|
location.register,left.location.register,0),
|
||||||
|
cgsize2fpuoppostfix[def_cgsize(resulttype.def)]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
cnotnode:=tarmnotnode;
|
cnotnode:=tarmnotnode;
|
||||||
|
cunaryminusnode:=tarmunaryminusnode;
|
||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2004-01-28 15:36:47 florian
|
Revision 1.6 2004-03-13 18:45:40 florian
|
||||||
|
* floating compares fixed
|
||||||
|
* unary minus for floats fixed
|
||||||
|
|
||||||
|
Revision 1.5 2004/01/28 15:36:47 florian
|
||||||
* fixed another couple of arm bugs
|
* fixed another couple of arm bugs
|
||||||
|
|
||||||
Revision 1.4 2003/11/02 14:30:03 florian
|
Revision 1.4 2003/11/02 14:30:03 florian
|
||||||
@ -108,4 +134,4 @@ end.
|
|||||||
|
|
||||||
Revision 1.3 2003/08/27 00:27:56 florian
|
Revision 1.3 2003/08/27 00:27:56 florian
|
||||||
+ same procedure as very day: today's work on arm
|
+ same procedure as very day: today's work on arm
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user