Exemplo n.º 1
0
 public override void Visit(JumpIfNonZero node)
 {
     AcpiObject.AcpiObject predicate = thread.Pop().Read();
     if (predicate.GetAsInt().Value != 0)
     {
         Frame.JumpTo(node.ThenTarget - 1); // Minus one because IP will still advance
     }
 }
Exemplo n.º 2
0
        public override void Visit(AmlParser.DefWhile defWhile)
        {
            // We create a sequence like this:
            // jump to pushPredicate
            // loopback:
            // (body instructions)
            // pushPredicate:
            // (push predicate)
            // jump if not zero to loopback

            Jump          jumpToPushPredicate = new Jump();
            JumpIfNonZero jumpLoopBack        = new JumpIfNonZero();

            result.Add(jumpToPushPredicate);
            jumpLoopBack.ThenTarget = result.Count;
            VisitSequence(defWhile.termList);
            jumpToPushPredicate.Target = result.Count;
            defWhile.predicate.Accept(this);
            result.Add(jumpLoopBack);
        }
Exemplo n.º 3
0
        public override void Visit(AmlParser.DefIfElse defIfElse)
        {
            // We create a sequence like this:
            // (push predicate)
            // jump if nonzero to thenBranch
            // (else branch instructions)
            // jump to end
            // elseBranch:
            // (then branch instructions)
            // end:

            defIfElse.predicate.Accept(this);
            JumpIfNonZero thenJump = new JumpIfNonZero();

            result.Add(thenJump);
            defIfElse.defElse.Accept(this);
            Jump jumpOverThenBrach = new Jump();

            result.Add(jumpOverThenBrach);
            thenJump.ThenTarget = result.Count;
            VisitSequence(defIfElse.termList);
            jumpOverThenBrach.Target = result.Count;
        }