mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 07:46:00 +02:00
* internal changeregsize for optimizer
* fix with a hack to not remove the first instruction of a block which will leave blockstart pointing to invalid memory
This commit is contained in:
parent
4d67ae9f31
commit
4c66ac6cab
@ -832,11 +832,11 @@ begin
|
|||||||
if reg.enum = newReg.enum then
|
if reg.enum = newReg.enum then
|
||||||
reg := orgReg
|
reg := orgReg
|
||||||
else if (reg.enum in regset8bit) and
|
else if (reg.enum in regset8bit) and
|
||||||
(reg.enum = rg.makeregsize(newReg,OS_8).enum) then
|
(reg.enum = changeregsize(newReg,S_B).enum) then
|
||||||
reg := rg.makeregsize(orgReg,OS_8)
|
reg := changeregsize(orgReg,S_B)
|
||||||
else if (reg.enum in regset16bit) and
|
else if (reg.enum in regset16bit) and
|
||||||
(reg.enum = rg.makeregsize(newReg,OS_16).enum) then
|
(reg.enum = changeregsize(newReg,S_W).enum) then
|
||||||
reg := rg.makeregsize(orgReg,OS_16)
|
reg := changeregsize(orgReg,S_W)
|
||||||
else
|
else
|
||||||
changeReg := false;
|
changeReg := false;
|
||||||
end;
|
end;
|
||||||
@ -1396,9 +1396,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
case t.opsize of
|
case t.opsize of
|
||||||
S_B,S_BW,S_BL:
|
S_B,S_BW,S_BL:
|
||||||
memtoreg := rg.makeregsize(regcounter,OS_8);
|
memtoreg := changeregsize(regcounter,S_B);
|
||||||
S_W,S_WL:
|
S_W,S_WL:
|
||||||
memtoreg := rg.makeregsize(regcounter,OS_16);
|
memtoreg := changeregsize(regcounter,S_W);
|
||||||
S_L:
|
S_L:
|
||||||
memtoreg := regcounter;
|
memtoreg := regcounter;
|
||||||
end;
|
end;
|
||||||
@ -1997,7 +1997,12 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.46 2003-05-30 23:57:08 peter
|
Revision 1.47 2003-06-03 21:09:05 peter
|
||||||
|
* internal changeregsize for optimizer
|
||||||
|
* fix with a hack to not remove the first instruction of a block
|
||||||
|
which will leave blockstart pointing to invalid memory
|
||||||
|
|
||||||
|
Revision 1.46 2003/05/30 23:57:08 peter
|
||||||
* more sparc cleanup
|
* more sparc cleanup
|
||||||
* accumulator removed, splitted in function_return_reg (called) and
|
* accumulator removed, splitted in function_return_reg (called) and
|
||||||
function_result_reg (caller)
|
function_result_reg (caller)
|
||||||
|
@ -158,6 +158,8 @@ type
|
|||||||
|
|
||||||
Procedure InsertLLItem(AsmL: TAAsmOutput; prev, foll, new_one: TLinkedListItem);
|
Procedure InsertLLItem(AsmL: TAAsmOutput; prev, foll, new_one: TLinkedListItem);
|
||||||
|
|
||||||
|
|
||||||
|
function changeregsize(r:tregister;size:topsize):tregister;
|
||||||
Function Reg32(Reg: TRegister): TRegister;
|
Function Reg32(Reg: TRegister): TRegister;
|
||||||
Function RefsEquivalent(Const R1, R2: TReference; Var RegInfo: TRegInfo; OpAct: TOpAction): Boolean;
|
Function RefsEquivalent(Const R1, R2: TReference; Var RegInfo: TRegInfo; OpAct: TOpAction): Boolean;
|
||||||
Function RefsEqual(Const R1, R2: TReference): Boolean;
|
Function RefsEqual(Const R1, R2: TReference): Boolean;
|
||||||
@ -573,6 +575,64 @@ End;
|
|||||||
|
|
||||||
{************************ Some general functions ************************}
|
{************************ Some general functions ************************}
|
||||||
|
|
||||||
|
const
|
||||||
|
reg2reg32 : array[firstreg..lastreg] of Toldregister = (R_NO,
|
||||||
|
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||||
|
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||||
|
R_EAX,R_ECX,R_EDX,R_EBX,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||||
|
);
|
||||||
|
reg2reg16 : array[firstreg..lastreg] of Toldregister = (R_NO,
|
||||||
|
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||||
|
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||||
|
R_AX,R_CX,R_DX,R_BX,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||||
|
);
|
||||||
|
reg2reg8 : array[firstreg..lastreg] of Toldregister = (R_NO,
|
||||||
|
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||||
|
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||||
|
);
|
||||||
|
|
||||||
|
{ convert a register to a specfied register size }
|
||||||
|
function changeregsize(r:tregister;size:topsize):tregister;
|
||||||
|
var
|
||||||
|
reg : tregister;
|
||||||
|
begin
|
||||||
|
case size of
|
||||||
|
S_B :
|
||||||
|
reg.enum:=reg2reg8[r.enum];
|
||||||
|
S_W :
|
||||||
|
reg.enum:=reg2reg16[r.enum];
|
||||||
|
S_L :
|
||||||
|
reg.enum:=reg2reg32[r.enum];
|
||||||
|
else
|
||||||
|
internalerror(200204101);
|
||||||
|
end;
|
||||||
|
if reg.enum=R_NO then
|
||||||
|
internalerror(200204102);
|
||||||
|
changeregsize:=reg;
|
||||||
|
end;
|
||||||
|
|
||||||
Function TCh2Reg(Ch: TInsChange): ToldRegister;
|
Function TCh2Reg(Ch: TInsChange): ToldRegister;
|
||||||
{converts a TChange variable to a TRegister}
|
{converts a TChange variable to a TRegister}
|
||||||
Begin
|
Begin
|
||||||
@ -599,10 +659,10 @@ Begin
|
|||||||
If (Reg.enum >= R_AX)
|
If (Reg.enum >= R_AX)
|
||||||
Then
|
Then
|
||||||
If (Reg.enum <= R_DI)
|
If (Reg.enum <= R_DI)
|
||||||
Then Reg32 := rg.makeregsize(Reg,OS_INT)
|
Then Reg32 := changeregsize(Reg,S_L)
|
||||||
Else
|
Else
|
||||||
If (Reg.enum <= R_BL)
|
If (Reg.enum <= R_BL)
|
||||||
Then Reg32 := rg.makeregsize(Reg,OS_INT);
|
Then Reg32 := changeregsize(Reg,S_L);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{ inserts new_one between prev and foll }
|
{ inserts new_one between prev and foll }
|
||||||
@ -665,37 +725,37 @@ Begin
|
|||||||
Case OldReg.enum Of
|
Case OldReg.enum Of
|
||||||
R_EAX..R_EDI:
|
R_EAX..R_EDI:
|
||||||
Begin
|
Begin
|
||||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_16).enum];
|
NewRegsEncountered := NewRegsEncountered + [changeregsize(NewReg,S_W).enum];
|
||||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_16).enum];
|
OldRegsEncountered := OldRegsEncountered + [changeregsize(OldReg,S_W).enum];
|
||||||
New2OldReg[rg.makeregsize(NewReg,OS_16).enum] := rg.makeregsize(OldReg,OS_16);
|
New2OldReg[changeregsize(NewReg,S_W).enum] := changeregsize(OldReg,S_W);
|
||||||
If (NewReg.enum in [R_EAX..R_EBX]) And
|
If (NewReg.enum in [R_EAX..R_EBX]) And
|
||||||
(OldReg.enum in [R_EAX..R_EBX]) Then
|
(OldReg.enum in [R_EAX..R_EBX]) Then
|
||||||
Begin
|
Begin
|
||||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_8).enum];
|
NewRegsEncountered := NewRegsEncountered + [changeregsize(NewReg,S_B).enum];
|
||||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_8).enum];
|
OldRegsEncountered := OldRegsEncountered + [changeregsize(OldReg,S_B).enum];
|
||||||
New2OldReg[rg.makeregsize(NewReg,OS_8).enum] := rg.makeregsize(OldReg,OS_8);
|
New2OldReg[changeregsize(NewReg,S_B).enum] := changeregsize(OldReg,S_B);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
R_AX..R_DI:
|
R_AX..R_DI:
|
||||||
Begin
|
Begin
|
||||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_32).enum];
|
NewRegsEncountered := NewRegsEncountered + [changeregsize(NewReg,S_L).enum];
|
||||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_32).enum];
|
OldRegsEncountered := OldRegsEncountered + [changeregsize(OldReg,S_L).enum];
|
||||||
New2OldReg[rg.makeregsize(NewReg,OS_32).enum] := rg.makeregsize(OldReg,OS_32);
|
New2OldReg[changeregsize(NewReg,S_L).enum] := changeregsize(OldReg,S_L);
|
||||||
If (NewReg.enum in [R_AX..R_BX]) And
|
If (NewReg.enum in [R_AX..R_BX]) And
|
||||||
(OldReg.enum in [R_AX..R_BX]) Then
|
(OldReg.enum in [R_AX..R_BX]) Then
|
||||||
Begin
|
Begin
|
||||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_8).enum];
|
NewRegsEncountered := NewRegsEncountered + [changeregsize(NewReg,S_B).enum];
|
||||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_8).enum];
|
OldRegsEncountered := OldRegsEncountered + [changeregsize(OldReg,S_B).enum];
|
||||||
New2OldReg[rg.makeregsize(NewReg,OS_8).enum] := rg.makeregsize(OldReg,OS_8);
|
New2OldReg[changeregsize(NewReg,S_B).enum] := changeregsize(OldReg,S_B);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
R_AL..R_BL:
|
R_AL..R_BL:
|
||||||
Begin
|
Begin
|
||||||
NewRegsEncountered := NewRegsEncountered + [rg.makeregsize(NewReg,OS_32).enum]
|
NewRegsEncountered := NewRegsEncountered + [changeregsize(NewReg,S_L).enum]
|
||||||
+ [rg.makeregsize(NewReg,OS_16).enum];
|
+ [changeregsize(NewReg,S_W).enum];
|
||||||
OldRegsEncountered := OldRegsEncountered + [rg.makeregsize(OldReg,OS_32).enum]
|
OldRegsEncountered := OldRegsEncountered + [changeregsize(OldReg,S_L).enum]
|
||||||
+ [rg.makeregsize(OldReg,OS_8).enum];
|
+ [changeregsize(OldReg,S_B).enum];
|
||||||
New2OldReg[rg.makeregsize(NewReg,OS_32).enum] := rg.makeregsize(OldReg,OS_32);
|
New2OldReg[changeregsize(NewReg,S_L).enum] := changeregsize(OldReg,S_L);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -2669,7 +2729,12 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.50 2003-05-26 21:17:18 peter
|
Revision 1.51 2003-06-03 21:09:05 peter
|
||||||
|
* internal changeregsize for optimizer
|
||||||
|
* fix with a hack to not remove the first instruction of a block
|
||||||
|
which will leave blockstart pointing to invalid memory
|
||||||
|
|
||||||
|
Revision 1.50 2003/05/26 21:17:18 peter
|
||||||
* procinlinenode removed
|
* procinlinenode removed
|
||||||
* aktexit2label removed, fast exit removed
|
* aktexit2label removed, fast exit removed
|
||||||
+ tcallnode.inlined_pass_2 added
|
+ tcallnode.inlined_pass_2 added
|
||||||
@ -2749,7 +2814,7 @@ End.
|
|||||||
the parast, detected by tcalcst3 test
|
the parast, detected by tcalcst3 test
|
||||||
|
|
||||||
Revision 1.33 2002/04/21 15:32:59 carl
|
Revision 1.33 2002/04/21 15:32:59 carl
|
||||||
* changeregsize -> rg.makeregsize
|
* changeregsize -> changeregsize
|
||||||
|
|
||||||
Revision 1.32 2002/04/20 21:37:07 carl
|
Revision 1.32 2002/04/20 21:37:07 carl
|
||||||
+ generic FPC_CHECKPOINTER
|
+ generic FPC_CHECKPOINTER
|
||||||
|
@ -611,7 +611,9 @@ Begin
|
|||||||
{ remove jumps to a label coming right after them }
|
{ remove jumps to a label coming right after them }
|
||||||
If GetNextInstruction(p, hp1) then
|
If GetNextInstruction(p, hp1) then
|
||||||
Begin
|
Begin
|
||||||
if FindLabel(tasmlabel(Taicpu(p).oper[0].sym), hp1) then
|
if FindLabel(tasmlabel(Taicpu(p).oper[0].sym), hp1) and
|
||||||
|
{$warning FIXME removing the first instruction fails}
|
||||||
|
(p<>blockstart) then
|
||||||
Begin
|
Begin
|
||||||
hp2:=Tai(hp1.next);
|
hp2:=Tai(hp1.next);
|
||||||
asml.remove(p);
|
asml.remove(p);
|
||||||
@ -1226,7 +1228,7 @@ Begin
|
|||||||
Case Taicpu(p).opsize of
|
Case Taicpu(p).opsize of
|
||||||
S_BW:
|
S_BW:
|
||||||
Begin
|
Begin
|
||||||
If (rg.makeregsize(Taicpu(p).oper[0].reg,OS_16).enum=Taicpu(p).oper[1].reg.enum) And
|
If (changeregsize(Taicpu(p).oper[0].reg,S_W).enum=Taicpu(p).oper[1].reg.enum) And
|
||||||
Not(CS_LittleSize In aktglobalswitches)
|
Not(CS_LittleSize In aktglobalswitches)
|
||||||
Then
|
Then
|
||||||
{Change "movzbw %al, %ax" to "andw $0x0ffh, %ax"}
|
{Change "movzbw %al, %ax" to "andw $0x0ffh, %ax"}
|
||||||
@ -1248,13 +1250,13 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
Taicpu(p).opcode := A_MOV;
|
Taicpu(p).opcode := A_MOV;
|
||||||
Taicpu(p).changeopsize(S_W);
|
Taicpu(p).changeopsize(S_W);
|
||||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_16));
|
Taicpu(p).LoadReg(0,changeregsize(Taicpu(p).oper[0].reg,S_W));
|
||||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
S_BL:
|
S_BL:
|
||||||
Begin
|
Begin
|
||||||
If (rg.makeregsize(Taicpu(p).oper[0].reg,OS_32).enum=Taicpu(p).oper[1].reg.enum) And
|
If (changeregsize(Taicpu(p).oper[0].reg,S_L).enum=Taicpu(p).oper[1].reg.enum) And
|
||||||
Not(CS_LittleSize in aktglobalswitches)
|
Not(CS_LittleSize in aktglobalswitches)
|
||||||
Then
|
Then
|
||||||
{Change "movzbl %al, %eax" to "andl $0x0ffh, %eax"}
|
{Change "movzbl %al, %eax" to "andl $0x0ffh, %eax"}
|
||||||
@ -1276,13 +1278,13 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
Taicpu(p).opcode := A_MOV;
|
Taicpu(p).opcode := A_MOV;
|
||||||
Taicpu(p).changeopsize(S_L);
|
Taicpu(p).changeopsize(S_L);
|
||||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_32));
|
Taicpu(p).LoadReg(0,changeregsize(Taicpu(p).oper[0].reg,S_L));
|
||||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ff);
|
||||||
End
|
End
|
||||||
End;
|
End;
|
||||||
S_WL:
|
S_WL:
|
||||||
Begin
|
Begin
|
||||||
If (rg.makeregsize(Taicpu(p).oper[0].reg,OS_32).enum=Taicpu(p).oper[1].reg.enum) And
|
If (changeregsize(Taicpu(p).oper[0].reg,S_L).enum=Taicpu(p).oper[1].reg.enum) And
|
||||||
Not(CS_LittleSize In aktglobalswitches)
|
Not(CS_LittleSize In aktglobalswitches)
|
||||||
Then
|
Then
|
||||||
{Change "movzwl %ax, %eax" to "andl $0x0ffffh, %eax"}
|
{Change "movzwl %ax, %eax" to "andl $0x0ffffh, %eax"}
|
||||||
@ -1304,7 +1306,7 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
Taicpu(p).opcode := A_MOV;
|
Taicpu(p).opcode := A_MOV;
|
||||||
Taicpu(p).changeopsize(S_L);
|
Taicpu(p).changeopsize(S_L);
|
||||||
Taicpu(p).LoadReg(0,rg.makeregsize(Taicpu(p).oper[0].reg,OS_32));
|
Taicpu(p).LoadReg(0,changeregsize(Taicpu(p).oper[0].reg,S_L));
|
||||||
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ffff);
|
Taicpu(hp1).LoadConst(0,Taicpu(hp1).oper[0].val And $ffff);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -1612,7 +1614,7 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
Taicpu(hp1).changeopsize(S_L);
|
Taicpu(hp1).changeopsize(S_L);
|
||||||
if Taicpu(hp1).oper[0].typ=top_reg then
|
if Taicpu(hp1).oper[0].typ=top_reg then
|
||||||
Taicpu(hp1).LoadReg(0,rg.makeregsize(Taicpu(hp1).oper[0].reg,OS_32));
|
Taicpu(hp1).LoadReg(0,changeregsize(Taicpu(hp1).oper[0].reg,S_L));
|
||||||
hp1 := Tai(p.next);
|
hp1 := Tai(p.next);
|
||||||
asml.Remove(p);
|
asml.Remove(p);
|
||||||
p.free;
|
p.free;
|
||||||
@ -1976,7 +1978,7 @@ See test/tgadint64 in the test suite.
|
|||||||
InsertLLItem(AsmL,p.previous, p, hp1);
|
InsertLLItem(AsmL,p.previous, p, hp1);
|
||||||
Taicpu(p).opcode := A_MOV;
|
Taicpu(p).opcode := A_MOV;
|
||||||
Taicpu(p).changeopsize(S_B);
|
Taicpu(p).changeopsize(S_B);
|
||||||
Taicpu(p).LoadReg(1,rg.makeregsize(Taicpu(p).oper[1].reg,OS_8));
|
Taicpu(p).LoadReg(1,changeregsize(Taicpu(p).oper[1].reg,S_B));
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End
|
End
|
||||||
@ -1996,7 +1998,7 @@ See test/tgadint64 in the test suite.
|
|||||||
Taicpu(p).oper[1].reg);
|
Taicpu(p).oper[1].reg);
|
||||||
Taicpu(p).opcode := A_MOV;
|
Taicpu(p).opcode := A_MOV;
|
||||||
Taicpu(p).changeopsize(S_B);
|
Taicpu(p).changeopsize(S_B);
|
||||||
Taicpu(p).LoadReg(1,rg.makeregsize(Taicpu(p).oper[1].reg,OS_8));
|
Taicpu(p).LoadReg(1,changeregsize(Taicpu(p).oper[1].reg,S_B));
|
||||||
InsertLLItem(AsmL,p.previous, p, hp1);
|
InsertLLItem(AsmL,p.previous, p, hp1);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -2061,7 +2063,12 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.45 2003-06-02 21:42:05 jonas
|
Revision 1.46 2003-06-03 21:09:05 peter
|
||||||
|
* internal changeregsize for optimizer
|
||||||
|
* fix with a hack to not remove the first instruction of a block
|
||||||
|
which will leave blockstart pointing to invalid memory
|
||||||
|
|
||||||
|
Revision 1.45 2003/06/02 21:42:05 jonas
|
||||||
* function results can now also be regvars
|
* function results can now also be regvars
|
||||||
- removed tprocinfo.return_offset, never use it again since it's invalid
|
- removed tprocinfo.return_offset, never use it again since it's invalid
|
||||||
if the result is a regvar
|
if the result is a regvar
|
||||||
@ -2165,7 +2172,7 @@ End.
|
|||||||
the parast, detected by tcalcst3 test
|
the parast, detected by tcalcst3 test
|
||||||
|
|
||||||
Revision 1.23 2002/04/21 15:40:49 carl
|
Revision 1.23 2002/04/21 15:40:49 carl
|
||||||
* changeregsize -> rg.makeregsize
|
* changeregsize -> changeregsize
|
||||||
|
|
||||||
Revision 1.22 2002/04/20 21:37:07 carl
|
Revision 1.22 2002/04/20 21:37:07 carl
|
||||||
+ generic FPC_CHECKPOINTER
|
+ generic FPC_CHECKPOINTER
|
||||||
@ -2180,7 +2187,7 @@ End.
|
|||||||
Revision 1.21 2002/04/15 19:44:21 peter
|
Revision 1.21 2002/04/15 19:44:21 peter
|
||||||
* fixed stackcheck that would be called recursively when a stack
|
* fixed stackcheck that would be called recursively when a stack
|
||||||
error was found
|
error was found
|
||||||
* generic rg.makeregsize(reg,size) for i386 register resizing
|
* generic changeregsize(reg,size) for i386 register resizing
|
||||||
* removed some more routines from cga unit
|
* removed some more routines from cga unit
|
||||||
* fixed returnvalue handling
|
* fixed returnvalue handling
|
||||||
* fixed default stacksize of linux and go32v2, 8kb was a bit small :-)
|
* fixed default stacksize of linux and go32v2, 8kb was a bit small :-)
|
||||||
|
@ -87,17 +87,17 @@ begin
|
|||||||
reg := reg1
|
reg := reg1
|
||||||
else if (reg.enum in regset8bit) then
|
else if (reg.enum in regset8bit) then
|
||||||
begin
|
begin
|
||||||
if (reg.enum = rg.makeregsize(reg1,OS_8).enum) then
|
if (reg.enum = changeregsize(reg1,S_B).enum) then
|
||||||
reg := rg.makeregsize(reg2,OS_8)
|
reg := changeregsize(reg2,S_B)
|
||||||
else if reg.enum = rg.makeregsize(reg2,OS_8).enum then
|
else if reg.enum = changeregsize(reg2,S_B).enum then
|
||||||
reg := rg.makeregsize(reg1,OS_8);
|
reg := changeregsize(reg1,S_B);
|
||||||
end
|
end
|
||||||
else if (reg.enum in regset16bit) then
|
else if (reg.enum in regset16bit) then
|
||||||
begin
|
begin
|
||||||
if reg.enum = rg.makeregsize(reg1,OS_16).enum then
|
if reg.enum = changeregsize(reg1,S_W).enum then
|
||||||
reg := rg.makeregsize(reg2,OS_16)
|
reg := changeregsize(reg2,S_W)
|
||||||
else if reg.enum = rg.makeregsize(reg2,OS_16).enum then
|
else if reg.enum = changeregsize(reg2,S_W).enum then
|
||||||
reg := rg.makeregsize(reg1,OS_16);
|
reg := changeregsize(reg1,S_W);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -358,7 +358,12 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.21 2003-03-28 19:16:57 peter
|
Revision 1.22 2003-06-03 21:09:05 peter
|
||||||
|
* internal changeregsize for optimizer
|
||||||
|
* fix with a hack to not remove the first instruction of a block
|
||||||
|
which will leave blockstart pointing to invalid memory
|
||||||
|
|
||||||
|
Revision 1.21 2003/03/28 19:16:57 peter
|
||||||
* generic constructor working for i386
|
* generic constructor working for i386
|
||||||
* remove fixed self register
|
* remove fixed self register
|
||||||
* esi added as address register for i386
|
* esi added as address register for i386
|
||||||
@ -401,7 +406,7 @@ End.
|
|||||||
the parast, detected by tcalcst3 test
|
the parast, detected by tcalcst3 test
|
||||||
|
|
||||||
Revision 1.13 2002/04/21 15:42:17 carl
|
Revision 1.13 2002/04/21 15:42:17 carl
|
||||||
* changeregsize -> rg.makeregsize
|
* changeregsize -> changeregsize
|
||||||
|
|
||||||
Revision 1.12 2002/04/20 21:37:08 carl
|
Revision 1.12 2002/04/20 21:37:08 carl
|
||||||
+ generic FPC_CHECKPOINTER
|
+ generic FPC_CHECKPOINTER
|
||||||
|
Loading…
Reference in New Issue
Block a user