Beispiel #1
0
def MOVE(classical_reg1, classical_reg2):
    """
    Produce a MOVE instruction.

    :param classical_reg1: The first classical register.
    :param classical_reg2: The second classical register, which gets modified.
    :return: A ClassicalMove instance.
    """
    left = unpack_classical_reg(classical_reg1)
    right = unpack_classical_reg(classical_reg2)
    return ClassicalMove(left, right)
Beispiel #2
0
def MOVE(classical_reg1: MemoryReferenceDesignator,
         classical_reg2: Union[MemoryReferenceDesignator, int, float]) -> ClassicalMove:
    """
    Produce a MOVE instruction.

    :param classical_reg1: The first classical register, which gets modified.
    :param classical_reg2: The second classical register or immediate value.
    :return: A ClassicalMove instance.
    """
    left, right = unpack_reg_val_pair(classical_reg1, classical_reg2)
    return ClassicalMove(left, right)
Beispiel #3
0
 def exitClassicalBinary(self, ctx):
     # type: (QuilParser.ClassicalBinaryContext) -> None
     if ctx.AND():
         self.result.append(
             ClassicalAnd(_addr(ctx.addr(0)), _addr(ctx.addr(1))))
     elif ctx.OR():
         self.result.append(
             ClassicalOr(_addr(ctx.addr(0)), _addr(ctx.addr(1))))
     elif ctx.MOVE():
         self.result.append(
             ClassicalMove(_addr(ctx.addr(0)), _addr(ctx.addr(1))))
     elif ctx.EXCHANGE():
         self.result.append(
             ClassicalExchange(_addr(ctx.addr(0)), _addr(ctx.addr(1))))
Beispiel #4
0
 def move(self, left, right):
     return ClassicalMove(left, right)