mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-28 13:19:44 +02:00
* more powerpc fixes
+ dummy tcgvecnode
This commit is contained in:
parent
3fe0229843
commit
463b355ba3
@ -38,7 +38,7 @@ interface
|
||||
procedure pass_2;override;
|
||||
end;
|
||||
|
||||
ti386vecnode = class(tvecnode)
|
||||
ti386vecnode = class(tcgvecnode)
|
||||
procedure pass_2;override;
|
||||
end;
|
||||
|
||||
@ -101,20 +101,7 @@ implementation
|
||||
|
||||
procedure ti386vecnode.pass_2;
|
||||
|
||||
function get_mul_size:longint;
|
||||
begin
|
||||
if nf_memindex in flags then
|
||||
get_mul_size:=1
|
||||
else
|
||||
begin
|
||||
if (left.resulttype.def.deftype=arraydef) then
|
||||
get_mul_size:=tarraydef(left.resulttype.def).elesize
|
||||
else
|
||||
get_mul_size:=resulttype.def.size;
|
||||
end
|
||||
end;
|
||||
|
||||
procedure calc_emit_mul;
|
||||
procedure calc_emit_mul;
|
||||
var
|
||||
l1,l2 : longint;
|
||||
begin
|
||||
@ -520,7 +507,11 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.38 2002-07-20 11:58:04 florian
|
||||
Revision 1.39 2002-07-28 21:34:31 florian
|
||||
* more powerpc fixes
|
||||
+ dummy tcgvecnode
|
||||
|
||||
Revision 1.38 2002/07/20 11:58:04 florian
|
||||
* types.pas renamed to defbase.pas because D6 contains a types
|
||||
unit so this would conflicts if D6 programms are compiled
|
||||
+ Willamette/SSE2 instructions to assembler added
|
||||
|
@ -30,7 +30,7 @@ unit ncgmem;
|
||||
interface
|
||||
|
||||
uses
|
||||
node,nmem;
|
||||
node,nmem,cpuinfo;
|
||||
|
||||
type
|
||||
tcgloadvmtnode = class(tloadvmtnode)
|
||||
@ -69,6 +69,13 @@ interface
|
||||
procedure pass_2;override;
|
||||
end;
|
||||
|
||||
tcgvecnode = class(tvecnode)
|
||||
function get_mul_size : aword;
|
||||
procedure second_wideansistring;virtual;
|
||||
procedure second_dynamicarray;virtual;
|
||||
procedure pass_2;override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -78,7 +85,7 @@ implementation
|
||||
aasmbase,aasmtai,aasmcpu,
|
||||
cgbase,pass_2,
|
||||
nld,ncon,nadd,
|
||||
cpuinfo,cpubase,cpupara,
|
||||
cpubase,cpupara,
|
||||
cgobj,cgcpu,
|
||||
tgobj,rgobj
|
||||
{$ifdef GDB}
|
||||
@ -453,6 +460,39 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
TCGVECNODE
|
||||
*****************************************************************************}
|
||||
|
||||
function tcgvecnode.get_mul_size : aword;
|
||||
begin
|
||||
if nf_memindex in flags then
|
||||
get_mul_size:=1
|
||||
else
|
||||
begin
|
||||
if (left.resulttype.def.deftype=arraydef) then
|
||||
get_mul_size:=tarraydef(left.resulttype.def).elesize
|
||||
else
|
||||
get_mul_size:=resulttype.def.size;
|
||||
end
|
||||
end;
|
||||
|
||||
procedure tcgvecnode.second_wideansistring;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure tcgvecnode.second_dynamicarray;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure tcgvecnode.pass_2;
|
||||
begin
|
||||
{!!!!}
|
||||
writeln('FIX ME: tcgvecnode.pass_2');
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
cloadvmtnode:=tcgloadvmtnode;
|
||||
chnewnode:=tcghnewnode;
|
||||
@ -463,10 +503,15 @@ begin
|
||||
csubscriptnode:=tcgsubscriptnode;
|
||||
cselfnode:=tcgselfnode;
|
||||
cwithnode:=tcgwithnode;
|
||||
cvecnode:=tcgvecnode;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.17 2002-07-11 14:41:28 florian
|
||||
Revision 1.18 2002-07-28 21:34:31 florian
|
||||
* more powerpc fixes
|
||||
+ dummy tcgvecnode
|
||||
|
||||
Revision 1.17 2002/07/11 14:41:28 florian
|
||||
* start of the new generic parameter handling
|
||||
|
||||
Revision 1.16 2002/07/07 09:52:32 florian
|
||||
|
@ -191,6 +191,15 @@ const
|
||||
a_load_reg_ref(list,size,tmpreg,ref);
|
||||
free_scratch_reg(list,tmpreg);
|
||||
end;
|
||||
LOC_FPUREGISTER:
|
||||
case size of
|
||||
OS_32:
|
||||
a_loadfpu_ref_reg(list,OS_F32,r,locpara.register);
|
||||
OS_64:
|
||||
a_loadfpu_ref_reg(list,OS_F64,r,locpara.register);
|
||||
else
|
||||
internalerror(2002072801);
|
||||
end;
|
||||
else
|
||||
internalerror(2002081103);
|
||||
end;
|
||||
@ -363,8 +372,19 @@ const
|
||||
op: tasmop;
|
||||
ref2: treference;
|
||||
begin
|
||||
if not(size in [OS_F32,OS_F64]) then
|
||||
internalerror(200201121);
|
||||
{ several functions call this procedure with OS_32 or OS_64 }
|
||||
{ so this makes life easier (FK) }
|
||||
case size of
|
||||
OS_32,OS_F32:
|
||||
size:=OS_F32;
|
||||
OS_64,OS_F64:
|
||||
size:=OS_F64;
|
||||
else
|
||||
begin
|
||||
writeln(ord(size));
|
||||
internalerror(200201121);
|
||||
end;
|
||||
end;
|
||||
ref2 := ref;
|
||||
fixref(list,ref2);
|
||||
op := fpuloadinstr[size,ref2.index <> R_NO,false];
|
||||
@ -1393,7 +1413,11 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.27 2002-07-28 16:01:59 jonas
|
||||
Revision 1.28 2002-07-28 21:34:31 florian
|
||||
* more powerpc fixes
|
||||
+ dummy tcgvecnode
|
||||
|
||||
Revision 1.27 2002/07/28 16:01:59 jonas
|
||||
+ tcg64fppc.a_op64_const_reg_reg() and tcg64fppc.a_op64_reg_reg_reg()
|
||||
* several fixes, most notably in a_load_reg_reg(): it didn't do any
|
||||
conversion from smaller to larger sizes or vice versa
|
||||
|
Loading…
Reference in New Issue
Block a user