public string ToIntelASM(SSA ssa) { string reg1 = "e" + ssa.Name + "x"; string op1 = ssa.Operand1.Value; if ((ssa.Operand1 as Operand).Version > 0) op1 = "e" + (ssa.Operand1 as Operand).Code + "x"; if (ssa.Operator == Amy.Operator.Assign) return "MOV " + reg1 + ", " + op1; if (ssa.Operator == Amy.Operator.Add) return "ADD " + reg1 + ", " + op1; if (ssa.Operator == Amy.Operator.Sub) return "SUB " + reg1 + ", " + op1; if (ssa.Operator == Amy.Operator.Mul) return "MUL " + reg1 + ", " + op1; if (ssa.Operator == Amy.Operator.Div) return "DIV " + reg1 + ", " + op1; return "!?"; }
public void Push(SSA ssa) { ssa.Previous = current; if (top == null) top = ssa; else current.Next1 = ssa; current = ssa; // Console.WriteLine(this.ToIntelASM(ssa)); }