public x86StackLocation AllocMemory(int Size, int Align) { var P = DataStoring.AlignWithIncrease(StackOffset, Align); StackOffset = P + Size; return(new x86StackLocation(Arch, FuncScope, P, Size, false)); }
public void LoadDiaglogue() { DataStoring.Load(); gameState = STATES.CURRENT; ChangeDialogue(); }
public SimpleRecResult Recognize(IdContainer Container, ref CodeString Code, List <Modifier> Out) { var State = Container.State; CodeString Inside, Cutted; var Result = RecognizerHelper.ExtractBracket(State, String, '(', ref Code, out Inside, out Cutted); if (Result == SimpleRecResult.Succeeded) { var Params = RecognizerHelper.GetParamList(State, Inside, 1); if (Params == null) { return(SimpleRecResult.Failed); } var Node = Constants.CreateCIntNode(Container, Params[0]); if (Node == null) { return(SimpleRecResult.Failed); } var Align = (int)Node.Integer; if (!DataStoring.VerifyAlign(Align)) { State.Messages.Add(MessageId.InvalidAlign, Cutted); return(SimpleRecResult.Failed); } for (var i = 0; i < Out.Count; i++) { if (Out[i] is AlignModifier) { State.Messages.Add(MessageId.NotExpected, Cutted); return(SimpleRecResult.Failed); } } Out.Add(new AlignModifier(Cutted, Align)); return(SimpleRecResult.Succeeded); } return(Result); }
public x86DataLocation GetAllocated(x86DataLocationType Type, int Size, int Align = -1) { if ((Type & x86DataLocationType.General) != 0) { var Sequence = x86CallConv.AllocationSequence.GRegisters; var Mask = new x86RegisterMask(Size); var HighMask = new x86RegisterMask(1, Size); if ((Type & x86DataLocationType.OneByte) == 0) { for (var i = 0; i < Sequence.Length; i++) { var Reg = Sequence[i]; if (Arch.IsGRegisterExists(Reg, Mask) && !Arch.IsGRegisterExists(Reg, 0, 1) && !GRegisters.IsFree(Reg, Mask)) { return(new x86GRegLocation(Arch, Reg, Mask)); } } for (var i = 0; i < Sequence.Length; i++) { var Reg = Sequence[i]; if (Arch.IsGRegisterExists(Reg, Mask) && !GRegisters.IsFree(Reg, Mask)) { return(new x86GRegLocation(Arch, Reg, Mask)); } } } else { for (var i = 0; i < Sequence.Length; i++) { var Reg = Sequence[i]; if (Arch.IsGRegisterExists(Reg, Mask) && Arch.IsGRegisterExists(Reg, 0, 1) && !GRegisters.IsFree(Reg, Mask)) { return(new x86GRegLocation(Arch, Reg, Mask)); } } } } if ((Type & x86DataLocationType.SSEReg) != 0) { var Sequence = x86CallConv.AllocationSequence.SSERegisters; for (var i = 0; i < Sequence.Length; i++) { var Reg = Sequence[i]; if (Reg < Arch.RegCount && !SSERegisters.IsFree(Reg)) { return(new x86SSERegLocation(Arch, Reg, Size)); } } } if ((Type & x86DataLocationType.Memory) != 0) { StackOffset = DataStoring.AlignWithDecrease(StackOffset - Size, Align); return(new x86StackLocation(Arch, FuncScope, StackOffset, Size, false)); } return(null); }
public void AlignStack(int Align) { StackOffset = DataStoring.AlignWithIncrease(StackOffset, Align); }
public void SaveDialogue() { DataStoring.Save(); }