mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-02-04 11:15:05 +01:00
* changeregsize -> rg.makeregsize
This commit is contained in:
parent
af40eb97ca
commit
fb605f11b0
@ -207,7 +207,7 @@ implementation
|
||||
|
||||
function def_getreg(p1:tdef):tregister;
|
||||
begin
|
||||
def_getreg:=changeregsize(rg.getregisterint(exprasmlist),def_opsize(p1));
|
||||
def_getreg:=rg.makeregsize(rg.getregisterint(exprasmlist),int_cgsize(p1.size));
|
||||
end;
|
||||
|
||||
|
||||
@ -357,9 +357,9 @@ implementation
|
||||
LOC_REGISTER,
|
||||
LOC_CREGISTER : begin
|
||||
if aktalignment.paraalign=4 then
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_L,changeregsize(t.register,S_L)))
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_L,rg.makeregsize(t.register,OS_32)))
|
||||
else
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_W,changeregsize(t.register,S_W)));
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_W,rg.makeregsize(t.register,OS_16)));
|
||||
end;
|
||||
LOC_CONSTANT : begin
|
||||
if aktalignment.paraalign=4 then
|
||||
@ -655,10 +655,10 @@ implementation
|
||||
begin
|
||||
{ and now look for an 8 bit register }
|
||||
swap:=false;
|
||||
if R_EAX in rg.unusedregsint then reg8:=changeregsize(rg.getexplicitregisterint(exprasmlist,R_EAX),S_B)
|
||||
else if R_EDX in rg.unusedregsint then reg8:=changeregsize(rg.getexplicitregisterint(exprasmlist,R_EDX),S_B)
|
||||
else if R_EBX in rg.unusedregsint then reg8:=changeregsize(rg.getexplicitregisterint(exprasmlist,R_EBX),S_B)
|
||||
else if R_ECX in rg.unusedregsint then reg8:=changeregsize(rg.getexplicitregisterint(exprasmlist,R_ECX),S_B)
|
||||
if R_EAX in rg.unusedregsint then reg8:=rg.makeregsize(rg.getexplicitregisterint(exprasmlist,R_EAX),OS_8)
|
||||
else if R_EDX in rg.unusedregsint then reg8:=rg.makeregsize(rg.getexplicitregisterint(exprasmlist,R_EDX),OS_8)
|
||||
else if R_EBX in rg.unusedregsint then reg8:=rg.makeregsize(rg.getexplicitregisterint(exprasmlist,R_EBX),OS_8)
|
||||
else if R_ECX in rg.unusedregsint then reg8:=rg.makeregsize(rg.getexplicitregisterint(exprasmlist,R_ECX),OS_8)
|
||||
else
|
||||
begin
|
||||
swap:=true;
|
||||
@ -2301,7 +2301,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.25 2002-04-20 21:37:07 carl
|
||||
Revision 1.26 2002-04-21 15:29:53 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.25 2002/04/20 21:37:07 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
|
||||
@ -822,11 +822,11 @@ begin
|
||||
if reg = newReg then
|
||||
reg := orgReg
|
||||
else if (reg in regset8bit) and
|
||||
(reg = Changeregsize(newReg,S_B)) then
|
||||
reg := Changeregsize(orgReg,S_B)
|
||||
(reg = rg.makeregsize(newReg,OS_8)) then
|
||||
reg := rg.makeregsize(orgReg,OS_8)
|
||||
else if (reg in regset16bit) and
|
||||
(reg = Changeregsize(newReg,S_W)) then
|
||||
reg := Changeregsize(orgReg,S_W)
|
||||
(reg = rg.makeregsize(newReg,OS_16)) then
|
||||
reg := rg.makeregsize(orgReg,OS_16)
|
||||
else
|
||||
changeReg := false;
|
||||
end;
|
||||
@ -1385,9 +1385,9 @@ begin
|
||||
begin
|
||||
case t.opsize of
|
||||
S_B,S_BW,S_BL:
|
||||
memtoreg := Changeregsize(regcounter,S_B);
|
||||
memtoreg := rg.makeregsize(regcounter,OS_8);
|
||||
S_W,S_WL:
|
||||
memtoreg := Changeregsize(regcounter,S_W);
|
||||
memtoreg := rg.makeregsize(regcounter,OS_16);
|
||||
S_L:
|
||||
memtoreg := regcounter;
|
||||
end;
|
||||
@ -1984,7 +1984,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.31 2002-04-20 21:37:07 carl
|
||||
Revision 1.32 2002-04-21 15:32:59 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.31 2002/04/20 21:37:07 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
|
||||
@ -226,7 +226,8 @@ Var
|
||||
Implementation
|
||||
|
||||
Uses
|
||||
globals, systems, verbose, cgbase, symconst, symsym, tainst, cginfo, rgobj;
|
||||
globals, systems, verbose, cgbase, symconst, symsym, tainst, cginfo, cgobj,
|
||||
rgobj;
|
||||
|
||||
Type
|
||||
TRefCompare = function(const r1, r2: TReference): Boolean;
|
||||
@ -586,10 +587,10 @@ Begin
|
||||
If (Reg >= R_AX)
|
||||
Then
|
||||
If (Reg <= R_DI)
|
||||
Then Reg32 := ChangeRegsize(Reg,S_L)
|
||||
Then Reg32 := rg.makeregsize(Reg,OS_INT)
|
||||
Else
|
||||
If (Reg <= R_BL)
|
||||
Then Reg32 := ChangeRegsize(Reg,S_L);
|
||||
Then Reg32 := rg.makeregsize(Reg,OS_INT);
|
||||
End;
|
||||
|
||||
{ inserts new_one between prev and foll }
|
||||
@ -641,37 +642,37 @@ Begin
|
||||
Case OldReg Of
|
||||
R_EAX..R_EDI:
|
||||
Begin
|
||||
NewRegsEncountered := NewRegsEncountered + [ChangeRegsize(NewReg,S_W)];
|
||||
OldRegsEncountered := OldRegsEncountered + [ChangeRegsize(OldReg,S_W)];
|
||||
New2OldReg[Changeregsize(NewReg,S_W)] := Changeregsize(OldReg,S_W);
|
||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_16)];
|
||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_16)];
|
||||
New2OldReg[rg.makeregsize(NewReg,OS_16)] := rg.makeregsize(OldReg,OS_16);
|
||||
If (NewReg in [R_EAX..R_EBX]) And
|
||||
(OldReg in [R_EAX..R_EBX]) Then
|
||||
Begin
|
||||
NewRegsEncountered := NewRegsEncountered + [Changeregsize(NewReg,S_B)];
|
||||
OldRegsEncountered := OldRegsEncountered + [Changeregsize(OldReg,S_B)];
|
||||
New2OldReg[Changeregsize(NewReg,S_B)] := Changeregsize(OldReg,S_B);
|
||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_8)];
|
||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_8)];
|
||||
New2OldReg[rg.makeregsize(NewReg,OS_8)] := rg.makeregsize(OldReg,OS_8);
|
||||
End;
|
||||
End;
|
||||
R_AX..R_DI:
|
||||
Begin
|
||||
NewRegsEncountered := NewRegsEncountered + [Changeregsize(NewReg,S_L)];
|
||||
OldRegsEncountered := OldRegsEncountered + [Changeregsize(OldReg,S_L)];
|
||||
New2OldReg[Changeregsize(NewReg,S_L)] := Changeregsize(OldReg,S_L);
|
||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_32)];
|
||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_32)];
|
||||
New2OldReg[rg.makeregsize(NewReg,OS_32)] := rg.makeregsize(OldReg,OS_32);
|
||||
If (NewReg in [R_AX..R_BX]) And
|
||||
(OldReg in [R_AX..R_BX]) Then
|
||||
Begin
|
||||
NewRegsEncountered := NewRegsEncountered + [Changeregsize(NewReg,S_B)];
|
||||
OldRegsEncountered := OldRegsEncountered + [Changeregsize(OldReg,S_B)];
|
||||
New2OldReg[Changeregsize(NewReg,S_B)] := Changeregsize(OldReg,S_B);
|
||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_8)];
|
||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_8)];
|
||||
New2OldReg[rg.makeregsize(NewReg,OS_8)] := rg.makeregsize(OldReg,OS_8);
|
||||
End;
|
||||
End;
|
||||
R_AL..R_BL:
|
||||
Begin
|
||||
NewRegsEncountered := NewRegsEncountered + [Changeregsize(NewReg,S_L)]
|
||||
+ [Changeregsize(NewReg,S_W)];
|
||||
OldRegsEncountered := OldRegsEncountered + [Changeregsize(OldReg,S_L)]
|
||||
+ [Changeregsize(OldReg,S_B)];
|
||||
New2OldReg[Changeregsize(NewReg,S_L)] := Changeregsize(OldReg,S_L);
|
||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_32)]
|
||||
+ [rg.makeregsize(NewReg,OS_16)];
|
||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_32)]
|
||||
+ [rg.makeregsize(OldReg,OS_8)];
|
||||
New2OldReg[rg.makeregsize(NewReg,OS_32)] := rg.makeregsize(OldReg,OS_32);
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
@ -2586,7 +2587,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.32 2002-04-20 21:37:07 carl
|
||||
Revision 1.33 2002-04-21 15:32:59 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.32 2002/04/20 21:37:07 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
|
||||
@ -1204,8 +1204,8 @@ implementation
|
||||
else
|
||||
begin
|
||||
location.register:=rg.getexplicitregisterint(exprasmlist,accumulator);
|
||||
hregister:=changeregsize(accumulator,TCGSize2Opsize[cgsize]);
|
||||
location.register:=changeregsize(location.register,TCGSize2Opsize[cgsize]);
|
||||
hregister:=rg.makeregsize(accumulator,cgsize);
|
||||
location.register:=rg.makeregsize(location.register,cgsize);
|
||||
cg.a_load_reg_reg(exprasmlist,cgsize,hregister,location.register);
|
||||
end;
|
||||
end;
|
||||
@ -1343,7 +1343,7 @@ implementation
|
||||
for i := 1 to maxvarregs do
|
||||
if assigned(regvars[i]) then
|
||||
begin
|
||||
tmpreg:=changeregsize(regvars[i].reg,S_L);
|
||||
tmpreg:=rg.makeregsize(regvars[i].reg,OS_INT);
|
||||
rg.makeregvar(tmpreg);
|
||||
end;
|
||||
end;
|
||||
@ -1477,7 +1477,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.45 2002-04-15 19:44:21 peter
|
||||
Revision 1.46 2002-04-21 15:34:25 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.45 2002/04/15 19:44:21 peter
|
||||
* fixed stackcheck that would be called recursively when a stack
|
||||
error was found
|
||||
* generic changeregsize(reg,size) for i386 register resizing
|
||||
|
||||
@ -257,7 +257,7 @@ implementation
|
||||
getlabel(hlabel);
|
||||
cg.a_label(exprasmlist,truelabel);
|
||||
cg.a_load_const_reg(exprasmlist,OS_INT,1,hregister);
|
||||
cg.a_jmp_cond(exprasmlist,OC_NONE,hlabel);
|
||||
cg.a_jmp_always(exprasmlist,hlabel);
|
||||
cg.a_label(exprasmlist,falselabel);
|
||||
cg.a_load_const_reg(exprasmlist,OS_INT,0,hregister);
|
||||
cg.a_label(exprasmlist,hlabel);
|
||||
@ -364,7 +364,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.35 2002-04-19 15:39:35 peter
|
||||
Revision 1.36 2002-04-21 15:35:23 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.35 2002/04/19 15:39:35 peter
|
||||
* removed some more routines from cga
|
||||
* moved location_force_reg/mem to ncgutil
|
||||
* moved arrayconstructnode secondpass to ncgld
|
||||
|
||||
@ -467,7 +467,7 @@ implementation
|
||||
{ need a cmp and jmp, but this should be done by the }
|
||||
{ type cast code which does range checking if necessary (FK) }
|
||||
begin
|
||||
hregister := changeregsize(tcallparanode(tcallparanode(left).right).left.location.register,S_L);
|
||||
hregister := rg.makeregsize(tcallparanode(tcallparanode(left).right).left.location.register,OS_INT);
|
||||
end
|
||||
else
|
||||
begin
|
||||
@ -591,7 +591,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.37 2002-04-19 15:39:35 peter
|
||||
Revision 1.38 2002-04-21 15:35:54 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.37 2002/04/19 15:39:35 peter
|
||||
* removed some more routines from cga
|
||||
* moved location_force_reg/mem to ncgutil
|
||||
* moved arrayconstructnode secondpass to ncgld
|
||||
|
||||
@ -149,13 +149,13 @@ implementation
|
||||
location.register:=tvarsym(symtableentry).reg;
|
||||
end
|
||||
else
|
||||
if not(changeregsize(tvarsym(symtableentry).reg,S_L) in [R_EAX..R_EBX]) or
|
||||
rg.regvar_loaded[changeregsize(tvarsym(symtableentry).reg,S_L)] then
|
||||
if not(rg.makeregsize(tvarsym(symtableentry).reg,OS_INT) in [R_EAX..R_EBX]) or
|
||||
rg.regvar_loaded[rg.makeregsize(tvarsym(symtableentry).reg,OS_INT)] then
|
||||
begin
|
||||
location_reset(location,LOC_CREGISTER,
|
||||
cg.reg_cgsize(tvarsym(symtableentry).reg));
|
||||
location.register:=tvarsym(symtableentry).reg;
|
||||
exclude(rg.unusedregsint,changeregsize(tvarsym(symtableentry).reg,S_L));
|
||||
exclude(rg.unusedregsint,rg.makeregsize(tvarsym(symtableentry).reg,OS_INT));
|
||||
end
|
||||
else
|
||||
begin
|
||||
@ -163,7 +163,7 @@ implementation
|
||||
location_reset(location,LOC_CREGISTER,
|
||||
cg.reg_cgsize(tvarsym(symtableentry).reg));
|
||||
location.register:=tvarsym(symtableentry).reg;
|
||||
exclude(rg.unusedregsint,changeregsize(tvarsym(symtableentry).reg,S_L));
|
||||
exclude(rg.unusedregsint,rg.makeregsize(tvarsym(symtableentry).reg,OS_INT));
|
||||
end
|
||||
end
|
||||
else
|
||||
@ -777,7 +777,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.36 2002-04-19 15:39:35 peter
|
||||
Revision 1.37 2002-04-21 15:36:13 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.36 2002/04/19 15:39:35 peter
|
||||
* removed some more routines from cga
|
||||
* moved location_force_reg/mem to ncgutil
|
||||
* moved arrayconstructnode secondpass to ncgld
|
||||
|
||||
@ -41,7 +41,7 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
uses pass_1, types, htypechk, cgbase, cpubase, cga,
|
||||
uses pass_1, types, htypechk, cginfo, cgbase, cpubase, cga,
|
||||
tgobj, aasm, ncnv, ncon, pass_2, symdef, rgobj;
|
||||
|
||||
|
||||
@ -117,7 +117,7 @@ begin
|
||||
{ free the registers of right }
|
||||
reference_release(exprasmlist,right.location.reference);
|
||||
{ get register for the char }
|
||||
hreg := changeregsize(rg.getregisterint(exprasmlist),S_B);
|
||||
hreg := rg.makeregsize(rg.getregisterint(exprasmlist),OS_8);
|
||||
emit_ref_reg(A_MOV,S_B,right.location.reference,hreg);
|
||||
{ I don't think a temp char exists, but it won't hurt (JM) }
|
||||
tg.ungetiftemp(exprasmlist,right.location.reference);
|
||||
@ -181,8 +181,8 @@ begin
|
||||
else
|
||||
emit_const_ref(A_MOV,S_B,tordconstnode(right).value,href2);
|
||||
{ increase the string length }
|
||||
emit_reg(A_INC,S_B,changeregsize(lengthreg,S_B));
|
||||
emit_reg_ref(A_MOV,S_B,changeregsize(lengthreg,S_B),left.location.reference);
|
||||
emit_reg(A_INC,S_B,rg.makeregsize(lengthreg,OS_8));
|
||||
emit_reg_ref(A_MOV,S_B,rg.makeregsize(lengthreg,OS_8),left.location.reference);
|
||||
rg.ungetregisterint(exprasmlist,lengthreg);
|
||||
if checklength then
|
||||
emitlab(l);
|
||||
@ -242,7 +242,10 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.10 2002-04-15 19:44:21 peter
|
||||
Revision 1.11 2002-04-21 15:36:40 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.10 2002/04/15 19:44:21 peter
|
||||
* fixed stackcheck that would be called recursively when a stack
|
||||
error was found
|
||||
* generic changeregsize(reg,size) for i386 register resizing
|
||||
|
||||
@ -220,7 +220,7 @@ implementation
|
||||
{ use the register as base in a reference (JM) }
|
||||
if ranges then
|
||||
begin
|
||||
pleftreg:=changeregsize(left.location.register,S_L);
|
||||
pleftreg:=rg.makeregsize(left.location.register,OS_INT);
|
||||
cg.a_load_reg_reg(exprasmlist,left.location.size,left.location.register,pleftreg);
|
||||
if opsize <> S_L then
|
||||
emit_const_reg(A_AND,S_L,255,pleftreg);
|
||||
@ -230,7 +230,7 @@ implementation
|
||||
{ otherwise simply use the lower 8 bits (no "and" }
|
||||
{ necessary this way) (JM) }
|
||||
begin
|
||||
pleftreg:=changeregsize(left.location.register,S_B);
|
||||
pleftreg:=rg.makeregsize(left.location.register,OS_8);
|
||||
opsize := S_B;
|
||||
end;
|
||||
end
|
||||
@ -382,7 +382,7 @@ implementation
|
||||
LOC_REGISTER,
|
||||
LOC_CREGISTER:
|
||||
begin
|
||||
hr:=changeregsize(left.location.register,S_L);
|
||||
hr:=rg.makeregsize(left.location.register,OS_INT);
|
||||
cg.a_load_reg_reg(exprasmlist,left.location.size,left.location.register,hr);
|
||||
end;
|
||||
else
|
||||
@ -451,7 +451,7 @@ implementation
|
||||
LOC_REGISTER,
|
||||
LOC_CREGISTER:
|
||||
begin
|
||||
hr:=changeregsize(left.location.register,S_L);
|
||||
hr:=rg.makeregsize(left.location.register,OS_INT);
|
||||
cg.a_load_reg_reg(exprasmlist,left.location.size,left.location.register,hr);
|
||||
emit_const_reg(A_CMP,S_L,31,hr);
|
||||
emitjmp(C_NA,l);
|
||||
@ -523,7 +523,7 @@ implementation
|
||||
end
|
||||
else
|
||||
begin
|
||||
pleftreg := changeregsize(left.location.register,S_L);
|
||||
pleftreg := rg.makeregsize(left.location.register,OS_INT);
|
||||
opsize := def2def_opsize(left.resulttype.def,u32bittype.def);
|
||||
if opsize <> S_L then
|
||||
begin
|
||||
@ -817,21 +817,21 @@ implementation
|
||||
begin
|
||||
if with_sign then
|
||||
emit_reg_reg(A_MOVSX,S_WL,hregister,
|
||||
changeregsize(hregister,S_L))
|
||||
rg.makeregsize(hregister,OS_INT))
|
||||
else
|
||||
emit_reg_reg(A_MOVZX,S_WL,hregister,
|
||||
changeregsize(hregister,S_L));
|
||||
hregister:=changeregsize(hregister,S_L);
|
||||
rg.makeregsize(hregister,OS_INT));
|
||||
hregister:=rg.makeregsize(hregister,OS_INT);
|
||||
end
|
||||
else if opsize=S_B then
|
||||
begin
|
||||
if with_sign then
|
||||
emit_reg_reg(A_MOVSX,S_BL,hregister,
|
||||
changeregsize(hregister,S_L))
|
||||
rg.makeregsize(hregister,OS_INT))
|
||||
else
|
||||
emit_reg_reg(A_MOVZX,S_BL,hregister,
|
||||
changeregsize(hregister,S_L));
|
||||
hregister:=changeregsize(hregister,S_L);
|
||||
rg.makeregsize(hregister,OS_INT));
|
||||
hregister:=rg.makeregsize(hregister,OS_INT);
|
||||
end;
|
||||
reference_reset_symbol(href,table,0);
|
||||
href.offset:=(-longint(min_))*4;
|
||||
@ -1030,7 +1030,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.23 2002-04-19 15:39:35 peter
|
||||
Revision 1.24 2002-04-21 15:37:26 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.23 2002/04/19 15:39:35 peter
|
||||
* removed some more routines from cga
|
||||
* moved location_force_reg/mem to ncgutil
|
||||
* moved arrayconstructnode secondpass to ncgld
|
||||
|
||||
@ -319,9 +319,9 @@ implementation
|
||||
LOC_CREGISTER :
|
||||
begin
|
||||
if aktalignment.paraalign=4 then
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_L,changeregsize(p.location.register,S_W)))
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_L,rg.makeregsize(p.location.register,OS_16)))
|
||||
else
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_W,changeregsize(p.location.register,S_L)));
|
||||
exprasmList.concat(Taicpu.Op_reg(A_PUSH,S_W,rg.makeregsize(p.location.register,OS_32)));
|
||||
rg.ungetregisterint(exprasmlist,p.location.register);
|
||||
end;
|
||||
else
|
||||
@ -382,9 +382,7 @@ implementation
|
||||
cgsize:=OS_32;
|
||||
end;
|
||||
end;
|
||||
{$ifdef i386}
|
||||
p.location.register:=changeregsize(p.location.register,TCGSize2Opsize[cgsize]);
|
||||
{$endif i386}
|
||||
p.location.register:=rg.makeregsize(p.location.register,cgsize);
|
||||
inc(pushedparasize,alignment);
|
||||
if inlined then
|
||||
begin
|
||||
@ -936,7 +934,7 @@ implementation
|
||||
href := dest.location.reference;
|
||||
emit_const_ref(A_MOV,S_B,1,href);
|
||||
inc(href.offset,1);
|
||||
emit_reg_ref(A_MOV,S_B,changeregsize(source.location.register,S_B),href);
|
||||
emit_reg_ref(A_MOV,S_B,rg.makeregsize(source.location.register,OS_8),href);
|
||||
end
|
||||
else
|
||||
{ not so elegant (goes better with extra register }
|
||||
@ -1112,7 +1110,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.33 2002-04-20 21:37:07 carl
|
||||
Revision 1.34 2002-04-21 15:39:41 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.33 2002/04/20 21:37:07 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
|
||||
@ -1213,7 +1213,7 @@ Begin
|
||||
Case Taicpu(p).opsize of
|
||||
S_BW:
|
||||
Begin
|
||||
If (Taicpu(p).oper[0].reg = Changeregsize(Taicpu(p).oper[1].reg,S_B)) And
|
||||
If (Taicpu(p).oper[0].reg = rg.makeregsize(Taicpu(p).oper[1].reg,OS_8)) And
|
||||
Not(CS_LittleSize In aktglobalswitches)
|
||||
Then
|
||||
{Change "movzbw %al, %ax" to "andw $0x0ffh, %ax"}
|
||||
@ -1235,13 +1235,13 @@ Begin
|
||||
Begin
|
||||
Taicpu(p).opcode := A_MOV;
|
||||
Taicpu(p).changeopsize(S_W);
|
||||
Taicpu(p).LoadReg(0,Changeregsize(Taicpu(p).oper[0].reg,S_W));
|
||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_16));
|
||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
||||
End;
|
||||
End;
|
||||
S_BL:
|
||||
Begin
|
||||
If (Taicpu(p).oper[0].reg = Changeregsize(Taicpu(p).oper[1].reg,S_B)) And
|
||||
If (Taicpu(p).oper[0].reg = rg.makeregsize(Taicpu(p).oper[1].reg,OS_8)) And
|
||||
Not(CS_LittleSize in aktglobalswitches)
|
||||
Then
|
||||
{Change "movzbl %al, %eax" to "andl $0x0ffh, %eax"}
|
||||
@ -1263,13 +1263,13 @@ Begin
|
||||
Begin
|
||||
Taicpu(p).opcode := A_MOV;
|
||||
Taicpu(p).changeopsize(S_L);
|
||||
Taicpu(p).LoadReg(0,Changeregsize(Taicpu(p).oper[0].reg,S_L));
|
||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_32));
|
||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
||||
End
|
||||
End;
|
||||
S_WL:
|
||||
Begin
|
||||
If (Taicpu(p).oper[0].reg = Changeregsize(Taicpu(p).oper[1].reg,S_W)) And
|
||||
If (Taicpu(p).oper[0].reg = rg.makeregsize(Taicpu(p).oper[1].reg,OS_16)) And
|
||||
Not(CS_LittleSize In aktglobalswitches)
|
||||
Then
|
||||
{Change "movzwl %ax, %eax" to "andl $0x0ffffh, %eax"}
|
||||
@ -1291,7 +1291,7 @@ Begin
|
||||
Begin
|
||||
Taicpu(p).opcode := A_MOV;
|
||||
Taicpu(p).changeopsize(S_L);
|
||||
Taicpu(p).LoadReg(0,Changeregsize(Taicpu(p).oper[0].reg,S_L));
|
||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_32));
|
||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ffff);
|
||||
End;
|
||||
End;
|
||||
@ -1596,7 +1596,7 @@ Begin
|
||||
Begin
|
||||
Taicpu(hp1).changeopsize(S_L);
|
||||
if Taicpu(hp1).oper[0].typ=top_reg then
|
||||
Taicpu(hp1).LoadReg(0,Changeregsize(Taicpu(hp1).oper[0].reg,S_L));
|
||||
Taicpu(hp1).LoadReg(0,rg.makeregsize(Taicpu(hp1).oper[0].reg,OS_32));
|
||||
hp1 := Tai(p.next);
|
||||
asml.Remove(p);
|
||||
p.free;
|
||||
@ -1955,7 +1955,7 @@ Begin
|
||||
InsertLLItem(AsmL,p.previous, p, hp1);
|
||||
Taicpu(p).opcode := A_MOV;
|
||||
Taicpu(p).changeopsize(S_B);
|
||||
Taicpu(p).LoadReg(1,Changeregsize(Taicpu(p).oper[1].reg,S_B));
|
||||
Taicpu(p).LoadReg(1,rg.makeregsize(Taicpu(p).oper[1].reg,OS_8));
|
||||
End;
|
||||
End;
|
||||
End
|
||||
@ -1975,7 +1975,7 @@ Begin
|
||||
Taicpu(p).oper[1].reg);
|
||||
Taicpu(p).opcode := A_MOV;
|
||||
Taicpu(p).changeopsize(S_B);
|
||||
Taicpu(p).LoadReg(1,Changeregsize(Taicpu(p).oper[1].reg,S_B));
|
||||
Taicpu(p).LoadReg(1,rg.makeregsize(Taicpu(p).oper[1].reg,OS_8));
|
||||
InsertLLItem(AsmL,p.previous, p, hp1);
|
||||
End;
|
||||
End;
|
||||
@ -2040,7 +2040,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.22 2002-04-20 21:37:07 carl
|
||||
Revision 1.23 2002-04-21 15:40:49 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.22 2002/04/20 21:37:07 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
@ -2053,7 +2056,7 @@ End.
|
||||
Revision 1.21 2002/04/15 19:44:21 peter
|
||||
* fixed stackcheck that would be called recursively when a stack
|
||||
error was found
|
||||
* generic changeregsize(reg,size) for i386 register resizing
|
||||
* generic rg.makeregsize(reg,size) for i386 register resizing
|
||||
* removed some more routines from cga unit
|
||||
* fixed returnvalue handling
|
||||
* fixed default stacksize of linux and go32v2, 8kb was a bit small :-)
|
||||
|
||||
@ -81,17 +81,17 @@ begin
|
||||
reg := reg1
|
||||
else if (reg in regset8bit) then
|
||||
begin
|
||||
if (reg = Changeregsize(reg1,S_B)) then
|
||||
reg := Changeregsize(reg2,S_B)
|
||||
else if reg = Changeregsize(reg2,S_B) then
|
||||
reg := Changeregsize(reg1,S_B);
|
||||
if (reg = rg.makeregsize(reg1,OS_8)) then
|
||||
reg := rg.makeregsize(reg2,OS_8)
|
||||
else if reg = rg.makeregsize(reg2,OS_8) then
|
||||
reg := rg.makeregsize(reg1,OS_8);
|
||||
end
|
||||
else if (reg in regset16bit) then
|
||||
begin
|
||||
if reg = Changeregsize(reg1,S_W) then
|
||||
reg := Changeregsize(reg2,S_W)
|
||||
else if reg = Changeregsize(reg2,S_W) then
|
||||
reg := Changeregsize(reg1,S_W);
|
||||
if reg = rg.makeregsize(reg1,OS_16) then
|
||||
reg := rg.makeregsize(reg2,OS_16)
|
||||
else if reg = rg.makeregsize(reg2,OS_16) then
|
||||
reg := rg.makeregsize(reg1,OS_16);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -350,7 +350,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.12 2002-04-20 21:37:08 carl
|
||||
Revision 1.13 2002-04-21 15:42:17 carl
|
||||
* changeregsize -> rg.makeregsize
|
||||
|
||||
Revision 1.12 2002/04/20 21:37:08 carl
|
||||
+ generic FPC_CHECKPOINTER
|
||||
+ first parameter offset in stack now portable
|
||||
* rename some constants
|
||||
|
||||
Loading…
Reference in New Issue
Block a user