public static Tile ConstReg <T>()
 {
     return(makeBinopTile <ModOperatorNode, ConstantNode <T>, RegisterNode> (
                (regNode, left, right) => new[] {
         InstructionFactory.Xor(Target.RDX, Target.RDX),                              // RDX = 0
         InstructionFactory.Move(Target.RAX, left),                                   // RDX:RAX = left
         InstructionFactory.Div(right),                                               // RDX = left % right
         InstructionFactory.Move(regNode, Target.RDX)                                 // result = RDX
     }
                ));
 }
 public static Tile RegReg()
 {
     return(makeBinopTile <DivOperatorNode, RegisterNode, RegisterNode> (
                (regNode, left, right) => new[] {
         InstructionFactory.Xor(Target.RDX, Target.RDX),                              // RDX = 0
         InstructionFactory.Move(Target.RAX, left),                                   // RDX:RAX = left
         InstructionFactory.Div(right),                                               // RAX = left / right
         InstructionFactory.Move(regNode, Target.RAX)                                 // result = RAX
     }
                ));
 }