Beispiel #1
0
        public override void ExitNeg1(ssuplParser.Neg1Context context)
        {
            //neg    :  MINUS neg
            typeAttr.Put(context, type(context.neg()));

            switch (type(context.neg()))
            {
            case VarType.INT:
                code.Put(context,
                         code.Get(context.neg()),
                         "pop rax",     //value from neg
                         "neg rax",
                         "push rax"
                         );
                break;

            case VarType.DOUBLE:
                code.Put(context,
                         code.Get(context.neg()),
                         "movq xmm1, [rsp]", //pop value
                         "xorpd xmm0,xmm0",  //fast 0
                         "subsd xmm0,xmm1",  //negate
                         "movq [rsp], xmm0"  //push result
                         );
                break;
            }
        }
Beispiel #2
0
 public override void ExitNeg1(ssuplParser.Neg1Context context)
 {
     //neg    :  MINUS neg
     code.Put(context,
              code.Get(context.neg()),
              "pop rax", //value from neg
              "neg rax",
              "push rax"
              );
 }
 /// <summary>
 /// Exit a parse tree produced by the <c>neg1</c>
 /// labeled alternative in <see cref="ssuplParser.neg"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitNeg1([NotNull] ssuplParser.Neg1Context context)
 {
 }