public override string Template()
 {
     return($"{LeftExpression.Template()}" +
            "\nmovq\t%rax,%rcx" +
            $"\n{RightExpression.Template()}" +
            $"\n{AssignmentTemplate}\t# assign {RightExpression} to {LeftExpression}" +
            $"\n{LeftExpression.Save()}");
 }
Exemple #2
0
 public override string Template()
 {
     return
         ($"{LeftExpression.Template()}" +
          "\npush\t%rax" +
          $"\n{RightExpression.Template()}" +
          "\nmovq\t%rax,%rbx" +
          "\npop\t%rax" +
          "\ncqo" +
          $"\n{BinaryTemplate}");
 }
Exemple #3
0
        public override string Template()
        {
            return($"{RightExpression.Template()}\nmovq\t%rax,%rbx\n{LeftExpression.Template()}\n{AssignmentTemplate}\n{LeftExpression.Save()}");

            // var retrieve = $"\nmovq\t{varIndex}(%rbp),%rax";
            // const string div = "\nidiv\t%rbx";
            // var assign = $"\nmovq\t%rax,{varIndex}(%rbp)";
            //
            // return $"{Expression.Template()}" +
            //        "\nmovq\t%rax,%rbx" +
            //        retrieve +
            //        "\ncqo" +
            //        div +
            //        assign;
        }
Exemple #4
0
        public override string Template()
        {
            var data =
                $"{LeftExpression.Template()}" +
                "\npush\t%rax" +
                $"\n{RightExpression.Template()}" +
                "\nmovq\t%rax,%rbx" +
                "\npop\t%rax" +
                "\ncqo";

            return
                (data +
                 "\nidivq\t%rbx" +
                 "\nmovq\t$0,%rax" +
                 "\nmovq\t%rdx,%rax");
        }
Exemple #5
0
        public override string Template()
        {
            var branchName = Healpers.GetFunctionId();
            var endName    = Healpers.GetFunctionId();

            var main =
                $"{LeftExpression.Template()}" +
                "\ncmpq\t$0,%rax" +
                $"\nje\t{branchName}\t# OR ({LeftExpression} || {RightExpression})" +
                "\nmovq\t$1,%rax" +
                $"\njmp\t{endName}";

            var branch =
                $"\n{branchName}:" +
                $"\n{RightExpression.Template()}" +
                "\ncmpq\t$0,%rax" +
                "\nmovq\t$0,%rax" +
                "\nsetne\t%al";

            var end = $"\n{endName}:";

            return(main + branch + end);
        }
 public override string Template()
 {
     return($"{RightExpression.Template()}\npush\t%rax\n{LeftExpression.Template()}\npop\t%rcx\n{BinaryTemplate}");
 }
Exemple #7
0
 public override string Template()
 {
     return($"{RightExpression.Template()}\nmovq\t%rax,%rbx\n{LeftExpression.Template()}\n{AssignmentTemplate}\nmovq\t$0,%rax\nmovq\t%rdx,%rax\n{LeftExpression.Save()}");
 }
 public override string Template()
 {
     return($"{RightExpression.Template()}");
 }