diff --git a/netqasm/backend/executor.py b/netqasm/backend/executor.py index e4583c8..1e7001d 100644 --- a/netqasm/backend/executor.py +++ b/netqasm/backend/executor.py @@ -715,6 +715,12 @@ def _compute_binary_classical_instr( elif isinstance(instr, ins.core.SubmInstruction): assert mod is not None return (a - b) % mod + elif isinstance(instr, ins.core.MulInstruction): + return a * b + elif isinstance(instr, ins.core.DivInstruction): + return a // b + elif isinstance(instr, ins.core.RemInstruction): + return a % b else: raise ValueError(f"{instr} cannot be used as binary classical function") diff --git a/netqasm/lang/instr/core.py b/netqasm/lang/instr/core.py index 7c6fdae..b563f70 100644 --- a/netqasm/lang/instr/core.py +++ b/netqasm/lang/instr/core.py @@ -456,6 +456,12 @@ class DivInstruction(ClassicalOpInstruction): mnemonic: str = "div" +@dataclass +class RemInstruction(ClassicalOpInstruction): + id: int = 202 + mnemonic: str = "rem" + + @dataclass class MeasInstruction(base.RegRegInstruction): id: int = 32 diff --git a/netqasm/lang/instr/flavour.py b/netqasm/lang/instr/flavour.py index 89654aa..0a8610b 100644 --- a/netqasm/lang/instr/flavour.py +++ b/netqasm/lang/instr/flavour.py @@ -33,6 +33,7 @@ class InstrMap: core.SubmInstruction, core.MulInstruction, core.DivInstruction, + core.RemInstruction, core.MeasInstruction, core.MeasBasisInstruction, core.CreateEPRInstruction, diff --git a/netqasm/lang/ir.py b/netqasm/lang/ir.py index 6e011f9..ba0610a 100644 --- a/netqasm/lang/ir.py +++ b/netqasm/lang/ir.py @@ -43,6 +43,7 @@ class GenericInstr(Enum): SUBM = auto() MUL = auto() DIV = auto() + REM = auto() # Single-qubit gates X = auto() Y = auto()