def visitBopMulInt(self, node:AST.BOp, args=None): (prog_1, expr_1) = self.visit(node.expr1) (prog_2, expr_2) = self.visit(node.expr2) expr_3 = self.getTempVar() comment = IR.Comment(str(node.metadata)) bitlen = node.expr.bitlen decl = IR.Decl(expr_3.idf, node.type, node.type.bitlen, node.type.isSecret) assign = IR.Assn(expr_3, IRUtil.mul(expr_1, expr_2)) prog_3 = IRUtil.prog_merge(prog_1, prog_2, IR.Prog([comment, decl, assign])) progExtraBefore = IR.Prog([]) progExtraAfter = IR.Prog([]) if (Util.Config.disableTruncOpti): progExtraAfter = self.addTruncateFunctionCall(node, "MulInt", expr_3, Util.Config.consSF) else: expr1_sf = self.scaleFacMapping[expr_1.idf] expr2_sf = self.scaleFacMapping[expr_2.idf] if (expr1_sf > self.scaleFac): progExtraBefore = self.addTruncateFunctionCall(node.expr1, "MulInt", expr_1, expr1_sf-self.scaleFac) self.scaleFacMapping[expr_1.idf] = self.scaleFac if (expr2_sf > self.scaleFac): progExtraBefore = IRUtil.prog_merge(progExtraBefore, self.addTruncateFunctionCall(node.expr2, "MulInt", expr_2, expr2_sf-self.scaleFac)) self.scaleFacMapping[expr_2.idf] = self.scaleFac self.scaleFacMapping[expr_3.idf] = 2*self.scaleFac prog_3 = IRUtil.prog_merge(progExtraBefore, prog_3, progExtraAfter) return (prog_3, expr_3)
def visitBopMulInt(self, node: AST.BOp, args=None): (prog_1, expr_1) = self.visit(node.expr1) (prog_2, expr_2) = self.visit(node.expr2) prog_3 = IRUtil.prog_merge(prog_1, prog_2) expr_3 = IRUtil.mul(expr_1, expr_2) return (prog_3, expr_3)