mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-03 17:29:25 +01:00
* seperate OPTimizer INFO pointer field in tai object
This commit is contained in:
parent
2bb065a00a
commit
460464ff24
@ -95,6 +95,8 @@ unit aasm;
|
|||||||
pai = ^tai;
|
pai = ^tai;
|
||||||
tai = object(tlinkedlist_item)
|
tai = object(tlinkedlist_item)
|
||||||
typ : tait;
|
typ : tait;
|
||||||
|
{pointer to record with optimizer info about this tai object}
|
||||||
|
optinfo: pointer;
|
||||||
fileinfo : tfileposinfo;
|
fileinfo : tfileposinfo;
|
||||||
constructor init;
|
constructor init;
|
||||||
end;
|
end;
|
||||||
@ -351,6 +353,7 @@ uses
|
|||||||
|
|
||||||
constructor tai.init;
|
constructor tai.init;
|
||||||
begin
|
begin
|
||||||
|
optinfo := nil;
|
||||||
fileinfo:=aktfilepos;
|
fileinfo:=aktfilepos;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1006,7 +1009,10 @@ uses
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.42 1999-05-06 09:05:05 peter
|
Revision 1.43 1999-05-08 20:38:02 jonas
|
||||||
|
* seperate OPTimizer INFO pointer field in tai object
|
||||||
|
|
||||||
|
Revision 1.42 1999/05/06 09:05:05 peter
|
||||||
* generic write_float and str_float
|
* generic write_float and str_float
|
||||||
* fixed constant float conversions
|
* fixed constant float conversions
|
||||||
|
|
||||||
|
|||||||
@ -79,7 +79,7 @@ Begin {CheckSequence}
|
|||||||
RegCounter := R_EAX;
|
RegCounter := R_EAX;
|
||||||
GetLastInstruction(p, PrevNonRemovablePai);
|
GetLastInstruction(p, PrevNonRemovablePai);
|
||||||
While (RegCounter <= R_EDI) And
|
While (RegCounter <= R_EDI) And
|
||||||
(PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter].Typ <> Con_Ref) Do
|
(PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter].Typ <> Con_Ref) Do
|
||||||
Inc(RegCounter);
|
Inc(RegCounter);
|
||||||
While (RegCounter <= R_EDI) Do
|
While (RegCounter <= R_EDI) Do
|
||||||
Begin
|
Begin
|
||||||
@ -89,9 +89,9 @@ Begin {CheckSequence}
|
|||||||
RegInfo.New2OldReg[ProcInfo.FramePointer] := ProcInfo.FramePointer;
|
RegInfo.New2OldReg[ProcInfo.FramePointer] := ProcInfo.FramePointer;
|
||||||
RegInfo.New2OldReg[R_ESP] := R_ESP;
|
RegInfo.New2OldReg[R_ESP] := R_ESP;
|
||||||
Found := 0;
|
Found := 0;
|
||||||
hp2 := PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter].StartMod;
|
hp2 := PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter].StartMod;
|
||||||
If (PrevNonRemovablePai <> PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter].StartMod)
|
If (PrevNonRemovablePai <> PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter].StartMod)
|
||||||
Then OldNrOfMods := PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter].NrOfMods
|
Then OldNrOfMods := PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter].NrOfMods
|
||||||
Else OldNrOfMods := 1;
|
Else OldNrOfMods := 1;
|
||||||
hp3 := p;
|
hp3 := p;
|
||||||
While (Found <> OldNrOfMods) And
|
While (Found <> OldNrOfMods) And
|
||||||
@ -150,7 +150,7 @@ Begin {CheckSequence}
|
|||||||
Begin
|
Begin
|
||||||
TmpResult := False;
|
TmpResult := False;
|
||||||
If (Found > 0) Then
|
If (Found > 0) Then
|
||||||
Found := PPaiProp(Pai(p)^.fileinfo.line)^.Regs[Reg].NrOfMods
|
Found := PPaiProp(Pai(p)^.OptInfo)^.Regs[Reg].NrOfMods
|
||||||
End
|
End
|
||||||
End
|
End
|
||||||
Else
|
Else
|
||||||
@ -168,7 +168,7 @@ Begin {CheckSequence}
|
|||||||
Begin
|
Begin
|
||||||
TmpResult := False;
|
TmpResult := False;
|
||||||
If (Found > 0) Then
|
If (Found > 0) Then
|
||||||
Found := PPaiProp(Pai(p)^.fileinfo.line)^.Regs[Reg].NrOfMods
|
Found := PPaiProp(Pai(p)^.OptInfo)^.Regs[Reg].NrOfMods
|
||||||
End
|
End
|
||||||
End
|
End
|
||||||
Else *)
|
Else *)
|
||||||
@ -183,7 +183,7 @@ Begin {CheckSequence}
|
|||||||
and that it was equal (otherwise CheckSequence would have returned false
|
and that it was equal (otherwise CheckSequence would have returned false
|
||||||
and the instruction wouldn't have been removed). If this "If found > 0"
|
and the instruction wouldn't have been removed). If this "If found > 0"
|
||||||
check is left out, incorrect optimizations are performed.}
|
check is left out, incorrect optimizations are performed.}
|
||||||
Found := PPaiProp(Pai(p)^.fileinfo.line)^.Regs[Reg].NrOfMods
|
Found := PPaiProp(Pai(p)^.OptInfo)^.Regs[Reg].NrOfMods
|
||||||
End
|
End
|
||||||
End
|
End
|
||||||
Else TmpResult := True;
|
Else TmpResult := True;
|
||||||
@ -203,9 +203,9 @@ Begin {CheckSequence}
|
|||||||
Repeat
|
Repeat
|
||||||
Inc(RegCounter);
|
Inc(RegCounter);
|
||||||
Until (RegCounter > R_EDI) or
|
Until (RegCounter > R_EDI) or
|
||||||
((PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter].Typ = Con_Ref) {And
|
((PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter].Typ = Con_Ref) {And
|
||||||
((Regcounter = Reg) Or
|
((Regcounter = Reg) Or
|
||||||
Not(PaiInSequence(p, PPaiProp(PrevNonRemovablePai^.fileinfo.line)^.Regs[RegCounter]))) }
|
Not(PaiInSequence(p, PPaiProp(PrevNonRemovablePai^.OptInfo)^.Regs[RegCounter]))) }
|
||||||
);
|
);
|
||||||
End;
|
End;
|
||||||
If (HighFound > 0) And
|
If (HighFound > 0) And
|
||||||
@ -249,8 +249,8 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
Case Pai386(p)^.opcode Of
|
Case Pai386(p)^.opcode Of
|
||||||
A_CLD: If GetLastInstruction(p, hp1) And
|
A_CLD: If GetLastInstruction(p, hp1) And
|
||||||
(PPaiProp(hp1^.fileinfo.line)^.DirFlag = F_NotSet) Then
|
(PPaiProp(hp1^.OptInfo)^.DirFlag = F_NotSet) Then
|
||||||
PPaiProp(Pai(p)^.fileinfo.line)^.CanBeRemoved := True;
|
PPaiProp(Pai(p)^.OptInfo)^.CanBeRemoved := True;
|
||||||
A_MOV, A_MOVZX, A_MOVSX:
|
A_MOV, A_MOVZX, A_MOVSX:
|
||||||
Begin
|
Begin
|
||||||
Case Pai386(p)^.oper[0].typ Of
|
Case Pai386(p)^.oper[0].typ Of
|
||||||
@ -261,7 +261,7 @@ Begin
|
|||||||
End;}
|
End;}
|
||||||
Top_Ref:
|
Top_Ref:
|
||||||
Begin {destination is always a register in this case}
|
Begin {destination is always a register in this case}
|
||||||
With PPaiProp(p^.fileinfo.line)^.Regs[Reg32(Pai386(p)^.oper[1].reg)] Do
|
With PPaiProp(p^.OptInfo)^.Regs[Reg32(Pai386(p)^.oper[1].reg)] Do
|
||||||
Begin
|
Begin
|
||||||
If GetLastInstruction (p, hp1) And
|
If GetLastInstruction (p, hp1) And
|
||||||
(hp1^.typ <> ait_marker) Then
|
(hp1^.typ <> ait_marker) Then
|
||||||
@ -295,7 +295,7 @@ Begin
|
|||||||
RegInInstruction(Reg32(Pai386(hp2)^.oper[1].reg), p))
|
RegInInstruction(Reg32(Pai386(hp2)^.oper[1].reg), p))
|
||||||
Then hp1 := p;
|
Then hp1 := p;
|
||||||
{$ifndef noremove}
|
{$ifndef noremove}
|
||||||
PPaiProp(p^.fileinfo.line)^.CanBeRemoved := True;
|
PPaiProp(p^.OptInfo)^.CanBeRemoved := True;
|
||||||
{$endif noremove}
|
{$endif noremove}
|
||||||
Inc(Cnt2);
|
Inc(Cnt2);
|
||||||
GetNextInstruction(p, p);
|
GetNextInstruction(p, p);
|
||||||
@ -344,7 +344,6 @@ Begin
|
|||||||
{old reg new reg}
|
{old reg new reg}
|
||||||
RegInfo.New2OldReg[RegCounter], RegCounter));
|
RegInfo.New2OldReg[RegCounter], RegCounter));
|
||||||
hp3^.fileinfo := hp2^.fileinfo;
|
hp3^.fileinfo := hp2^.fileinfo;
|
||||||
hp3^.fileinfo.line := PPaiProp(hp2^.fileinfo.line)^.LineSave;
|
|
||||||
InsertLLItem(AsmL, Pai(hp2^.previous), hp2, hp3);
|
InsertLLItem(AsmL, Pai(hp2^.previous), hp2, hp3);
|
||||||
End
|
End
|
||||||
Else
|
Else
|
||||||
@ -354,7 +353,7 @@ Begin
|
|||||||
is reloaded)}
|
is reloaded)}
|
||||||
Begin
|
Begin
|
||||||
{load Cnt2 with the total number of instructions of this sequence}
|
{load Cnt2 with the total number of instructions of this sequence}
|
||||||
Cnt2 := PPaiProp(hp4^.fileinfo.line)^.
|
Cnt2 := PPaiProp(hp4^.OptInfo)^.
|
||||||
Regs[RegInfo.New2OldReg[RegCounter]].NrOfMods;
|
Regs[RegInfo.New2OldReg[RegCounter]].NrOfMods;
|
||||||
{sometimes, a register can not be removed from a sequence, because it's
|
{sometimes, a register can not be removed from a sequence, because it's
|
||||||
still used afterwards:
|
still used afterwards:
|
||||||
@ -373,10 +372,10 @@ Begin
|
|||||||
hp3 := hp2;
|
hp3 := hp2;
|
||||||
For Cnt := 1 to Pred(Cnt2) Do
|
For Cnt := 1 to Pred(Cnt2) Do
|
||||||
GetNextInstruction(hp3, hp3);
|
GetNextInstruction(hp3, hp3);
|
||||||
TmpState := PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter].WState;
|
TmpState := PPaiProp(hp3^.OptInfo)^.Regs[RegCounter].WState;
|
||||||
GetNextInstruction(hp3, hp3);
|
GetNextInstruction(hp3, hp3);
|
||||||
If (TmpState <> PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter].WState) Or
|
If (TmpState <> PPaiProp(hp3^.OptInfo)^.Regs[RegCounter].WState) Or
|
||||||
Not(RegCounter in PPaiProp(hp3^.fileinfo.line)^.UsedRegs) Then
|
Not(RegCounter in PPaiProp(hp3^.OptInfo)^.UsedRegs) Then
|
||||||
Begin
|
Begin
|
||||||
{$ifdef csdebug}
|
{$ifdef csdebug}
|
||||||
Writeln('Cnt2: ',Cnt2);
|
Writeln('Cnt2: ',Cnt2);
|
||||||
@ -388,30 +387,30 @@ Begin
|
|||||||
For Cnt := 1 to Cnt2 Do
|
For Cnt := 1 to Cnt2 Do
|
||||||
Begin
|
Begin
|
||||||
{save the WState of the last pai object of the sequence for later use}
|
{save the WState of the last pai object of the sequence for later use}
|
||||||
TmpState := PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter].WState;
|
TmpState := PPaiProp(hp3^.OptInfo)^.Regs[RegCounter].WState;
|
||||||
{$ifdef csdebug}
|
{$ifdef csdebug}
|
||||||
hp5 := new(pai_asm_comment,init(strpnew('WState for '+att_reg2str[Regcounter]+': '
|
hp5 := new(pai_asm_comment,init(strpnew('WState for '+att_reg2str[Regcounter]+': '
|
||||||
+tostr(tmpstate))));
|
+tostr(tmpstate))));
|
||||||
InsertLLItem(AsmL, hp3, pai(hp3^.next), hp5);
|
InsertLLItem(AsmL, hp3, pai(hp3^.next), hp5);
|
||||||
{$endif csdebug}
|
{$endif csdebug}
|
||||||
PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter] :=
|
PPaiProp(hp3^.OptInfo)^.Regs[RegCounter] :=
|
||||||
PPaiProp(hp4^.fileinfo.line)^.Regs[RegCounter];
|
PPaiProp(hp4^.OptInfo)^.Regs[RegCounter];
|
||||||
GetNextInstruction(hp3, hp3);
|
GetNextInstruction(hp3, hp3);
|
||||||
End;
|
End;
|
||||||
{here, hp3 = p = Pai object right after the sequence, TmpState = WState of
|
{here, hp3 = p = Pai object right after the sequence, TmpState = WState of
|
||||||
RegCounter at the last Pai object of the sequence}
|
RegCounter at the last Pai object of the sequence}
|
||||||
GetLastInstruction(hp3, hp3);
|
GetLastInstruction(hp3, hp3);
|
||||||
While GetNextInstruction(hp3, hp3) And
|
While GetNextInstruction(hp3, hp3) And
|
||||||
(PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter].WState
|
(PPaiProp(hp3^.OptInfo)^.Regs[RegCounter].WState
|
||||||
= TmpState) Do
|
= TmpState) Do
|
||||||
{$ifdef csdebug}
|
{$ifdef csdebug}
|
||||||
begin
|
begin
|
||||||
hp5 := new(pai_asm_comment,init(strpnew('WState for '+att_reg2str[Regcounter]+': '+
|
hp5 := new(pai_asm_comment,init(strpnew('WState for '+att_reg2str[Regcounter]+': '+
|
||||||
tostr(PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter].WState))));
|
tostr(PPaiProp(hp3^.OptInfo)^.Regs[RegCounter].WState))));
|
||||||
InsertLLItem(AsmL, hp3, pai(hp3^.next), hp5);
|
InsertLLItem(AsmL, hp3, pai(hp3^.next), hp5);
|
||||||
{$endif csdebug}
|
{$endif csdebug}
|
||||||
PPaiProp(hp3^.fileinfo.line)^.Regs[RegCounter] :=
|
PPaiProp(hp3^.OptInfo)^.Regs[RegCounter] :=
|
||||||
PPaiProp(hp4^.fileinfo.line)^.Regs[RegCounter];
|
PPaiProp(hp4^.OptInfo)^.Regs[RegCounter];
|
||||||
{$ifdef csdebug}
|
{$ifdef csdebug}
|
||||||
end;
|
end;
|
||||||
{$endif csdebug}
|
{$endif csdebug}
|
||||||
@ -425,7 +424,7 @@ Begin
|
|||||||
For Cnt := 1 to Cnt2 Do
|
For Cnt := 1 to Cnt2 Do
|
||||||
Begin
|
Begin
|
||||||
If RegModifiedByInstruction(RegCounter, hp3)
|
If RegModifiedByInstruction(RegCounter, hp3)
|
||||||
Then PPaiProp(hp3^.fileinfo.line)^.CanBeRemoved := False;
|
Then PPaiProp(hp3^.OptInfo)^.CanBeRemoved := False;
|
||||||
GetNextInstruction(hp3, hp3);
|
GetNextInstruction(hp3, hp3);
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
@ -442,9 +441,9 @@ Begin
|
|||||||
End
|
End
|
||||||
Else
|
Else
|
||||||
If (Cnt > 0) And
|
If (Cnt > 0) And
|
||||||
(PPaiProp(p^.fileinfo.line)^.
|
(PPaiProp(p^.OptInfo)^.
|
||||||
Regs[Reg32(Pai386(p)^.oper[1].reg)].Typ = Con_Ref) And
|
Regs[Reg32(Pai386(p)^.oper[1].reg)].Typ = Con_Ref) And
|
||||||
(PPaiProp(p^.fileinfo.line)^.CanBeRemoved) Then
|
(PPaiProp(p^.OptInfo)^.CanBeRemoved) Then
|
||||||
Begin
|
Begin
|
||||||
hp2 := p;
|
hp2 := p;
|
||||||
Cnt2 := 1;
|
Cnt2 := 1;
|
||||||
@ -452,7 +451,7 @@ Begin
|
|||||||
Begin
|
Begin
|
||||||
If RegInInstruction(Pai386(hp2)^.oper[1].reg, p) Or
|
If RegInInstruction(Pai386(hp2)^.oper[1].reg, p) Or
|
||||||
RegInInstruction(Reg32(Pai386(hp2)^.oper[1].reg), p) Then
|
RegInInstruction(Reg32(Pai386(hp2)^.oper[1].reg), p) Then
|
||||||
PPaiProp(p^.fileinfo.line)^.CanBeRemoved := False;
|
PPaiProp(p^.OptInfo)^.CanBeRemoved := False;
|
||||||
Inc(Cnt2);
|
Inc(Cnt2);
|
||||||
GetNextInstruction(p, p);
|
GetNextInstruction(p, p);
|
||||||
End;
|
End;
|
||||||
@ -466,10 +465,10 @@ Begin
|
|||||||
Top_Reg:
|
Top_Reg:
|
||||||
Begin
|
Begin
|
||||||
If GetLastInstruction(p, hp1) Then
|
If GetLastInstruction(p, hp1) Then
|
||||||
With PPaiProp(hp1^.fileinfo.line)^.Regs[Reg32(Pai386(p)^.oper[1].reg)] Do
|
With PPaiProp(hp1^.OptInfo)^.Regs[Reg32(Pai386(p)^.oper[1].reg)] Do
|
||||||
If (Typ = Con_Const) And
|
If (Typ = Con_Const) And
|
||||||
(StartMod = p) Then
|
(StartMod = p) Then
|
||||||
PPaiProp(p^.fileinfo.line)^.CanBeRemoved := True;
|
PPaiProp(p^.OptInfo)^.CanBeRemoved := True;
|
||||||
End;
|
End;
|
||||||
{ Top_Ref:;}
|
{ Top_Ref:;}
|
||||||
End;
|
End;
|
||||||
@ -477,17 +476,17 @@ Begin
|
|||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
A_STD: If GetLastInstruction(p, hp1) And
|
A_STD: If GetLastInstruction(p, hp1) And
|
||||||
(PPaiProp(hp1^.fileinfo.line)^.DirFlag = F_Set) Then
|
(PPaiProp(hp1^.OptInfo)^.DirFlag = F_Set) Then
|
||||||
PPaiProp(Pai(p)^.fileinfo.line)^.CanBeRemoved := True;
|
PPaiProp(Pai(p)^.OptInfo)^.CanBeRemoved := True;
|
||||||
A_XOR:
|
A_XOR:
|
||||||
Begin
|
Begin
|
||||||
If (Pai386(p)^.oper[0].typ = top_reg) And
|
If (Pai386(p)^.oper[0].typ = top_reg) And
|
||||||
(Pai386(p)^.oper[0].typ = top_reg) And
|
(Pai386(p)^.oper[0].typ = top_reg) And
|
||||||
(Pai386(p)^.oper[1].reg = Pai386(p)^.oper[1].reg) And
|
(Pai386(p)^.oper[1].reg = Pai386(p)^.oper[1].reg) And
|
||||||
GetLastInstruction(p, hp1) And
|
GetLastInstruction(p, hp1) And
|
||||||
(PPaiProp(hp1^.fileinfo.line)^.Regs[Reg32(Pai386(p)^.oper[1].reg)].typ = con_const) And
|
(PPaiProp(hp1^.OptInfo)^.Regs[Reg32(Pai386(p)^.oper[1].reg)].typ = con_const) And
|
||||||
(PPaiProp(hp1^.fileinfo.line)^.Regs[Reg32(Pai386(p)^.oper[1].reg)].StartMod = nil)
|
(PPaiProp(hp1^.OptInfo)^.Regs[Reg32(Pai386(p)^.oper[1].reg)].StartMod = nil)
|
||||||
Then PPaiProp(p^.fileinfo.line)^.CanBeRemoved := True
|
Then PPaiProp(p^.OptInfo)^.CanBeRemoved := True
|
||||||
End
|
End
|
||||||
End
|
End
|
||||||
End;
|
End;
|
||||||
@ -511,11 +510,11 @@ Begin
|
|||||||
While (p <> Last) Do
|
While (p <> Last) Do
|
||||||
Begin
|
Begin
|
||||||
{$ifndef noinstremove}
|
{$ifndef noinstremove}
|
||||||
If PPaiProp(p^.fileinfo.line)^.CanBeRemoved
|
If PPaiProp(p^.OptInfo)^.CanBeRemoved
|
||||||
Then
|
Then
|
||||||
Begin
|
Begin
|
||||||
{$IfDef TP}
|
{$IfDef TP}
|
||||||
Dispose(PPaiProp(p^.fileinfo.line));
|
Dispose(PPaiProp(p^.OptInfo));
|
||||||
{$EndIf}
|
{$EndIf}
|
||||||
GetNextInstruction(p, hp1);
|
GetNextInstruction(p, hp1);
|
||||||
AsmL^.Remove(p);
|
AsmL^.Remove(p);
|
||||||
@ -527,12 +526,9 @@ Begin
|
|||||||
{$endif noinstremove}
|
{$endif noinstremove}
|
||||||
Begin
|
Begin
|
||||||
{$IfDef TP}
|
{$IfDef TP}
|
||||||
TmpLine := PPaiProp(p^.fileinfo.line)^.linesave;
|
Dispose(PPaiProp(p^.OptInfo));
|
||||||
Dispose(PPaiProp(p^.fileinfo.line));
|
|
||||||
p^.fileinfo.line := TmpLine;
|
|
||||||
{$Else TP}
|
|
||||||
p^.fileinfo.line := PPaiProp(p^.fileinfo.line)^.linesave;
|
|
||||||
{$EndIf TP}
|
{$EndIf TP}
|
||||||
|
p^.OptInfo := nil;
|
||||||
GetNextInstruction(p, p);
|
GetNextInstruction(p, p);
|
||||||
Inc(InstrCnt);
|
Inc(InstrCnt);
|
||||||
End;
|
End;
|
||||||
@ -552,7 +548,10 @@ End.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.20 1999-05-01 13:24:19 peter
|
Revision 1.21 1999-05-08 20:38:03 jonas
|
||||||
|
* seperate OPTimizer INFO pointer field in tai object
|
||||||
|
|
||||||
|
Revision 1.20 1999/05/01 13:24:19 peter
|
||||||
* merged nasm compiler
|
* merged nasm compiler
|
||||||
* old asm moved to oldasm/
|
* old asm moved to oldasm/
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user