* more powerpc fixes

+ dummy tcgvecnode
This commit is contained in:
florian 2002-07-28 21:34:31 +00:00
parent 3fe0229843
commit 463b355ba3
3 changed files with 82 additions and 22 deletions

View File

@ -38,7 +38,7 @@ interface
procedure pass_2;override; procedure pass_2;override;
end; end;
ti386vecnode = class(tvecnode) ti386vecnode = class(tcgvecnode)
procedure pass_2;override; procedure pass_2;override;
end; end;
@ -101,20 +101,7 @@ implementation
procedure ti386vecnode.pass_2; procedure ti386vecnode.pass_2;
function get_mul_size:longint; procedure calc_emit_mul;
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;
var var
l1,l2 : longint; l1,l2 : longint;
begin begin
@ -520,7 +507,11 @@ begin
end. end.
{ {
$Log$ $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 * types.pas renamed to defbase.pas because D6 contains a types
unit so this would conflicts if D6 programms are compiled unit so this would conflicts if D6 programms are compiled
+ Willamette/SSE2 instructions to assembler added + Willamette/SSE2 instructions to assembler added

View File

@ -30,7 +30,7 @@ unit ncgmem;
interface interface
uses uses
node,nmem; node,nmem,cpuinfo;
type type
tcgloadvmtnode = class(tloadvmtnode) tcgloadvmtnode = class(tloadvmtnode)
@ -69,6 +69,13 @@ interface
procedure pass_2;override; procedure pass_2;override;
end; end;
tcgvecnode = class(tvecnode)
function get_mul_size : aword;
procedure second_wideansistring;virtual;
procedure second_dynamicarray;virtual;
procedure pass_2;override;
end;
implementation implementation
uses uses
@ -78,7 +85,7 @@ implementation
aasmbase,aasmtai,aasmcpu, aasmbase,aasmtai,aasmcpu,
cgbase,pass_2, cgbase,pass_2,
nld,ncon,nadd, nld,ncon,nadd,
cpuinfo,cpubase,cpupara, cpubase,cpupara,
cgobj,cgcpu, cgobj,cgcpu,
tgobj,rgobj tgobj,rgobj
{$ifdef GDB} {$ifdef GDB}
@ -453,6 +460,39 @@ implementation
end; end;
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 begin
cloadvmtnode:=tcgloadvmtnode; cloadvmtnode:=tcgloadvmtnode;
chnewnode:=tcghnewnode; chnewnode:=tcghnewnode;
@ -463,10 +503,15 @@ begin
csubscriptnode:=tcgsubscriptnode; csubscriptnode:=tcgsubscriptnode;
cselfnode:=tcgselfnode; cselfnode:=tcgselfnode;
cwithnode:=tcgwithnode; cwithnode:=tcgwithnode;
cvecnode:=tcgvecnode;
end. end.
{ {
$Log$ $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 * start of the new generic parameter handling
Revision 1.16 2002/07/07 09:52:32 florian Revision 1.16 2002/07/07 09:52:32 florian

View File

@ -191,6 +191,15 @@ const
a_load_reg_ref(list,size,tmpreg,ref); a_load_reg_ref(list,size,tmpreg,ref);
free_scratch_reg(list,tmpreg); free_scratch_reg(list,tmpreg);
end; 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 else
internalerror(2002081103); internalerror(2002081103);
end; end;
@ -363,8 +372,19 @@ const
op: tasmop; op: tasmop;
ref2: treference; ref2: treference;
begin begin
if not(size in [OS_F32,OS_F64]) then { several functions call this procedure with OS_32 or OS_64 }
internalerror(200201121); { 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; ref2 := ref;
fixref(list,ref2); fixref(list,ref2);
op := fpuloadinstr[size,ref2.index <> R_NO,false]; op := fpuloadinstr[size,ref2.index <> R_NO,false];
@ -1393,7 +1413,11 @@ begin
end. end.
{ {
$Log$ $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() + 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 * several fixes, most notably in a_load_reg_reg(): it didn't do any
conversion from smaller to larger sizes or vice versa conversion from smaller to larger sizes or vice versa