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 } )); }