@@ -817,6 +817,8 @@ fn parse_statement(input: &mut &str) -> ModalResult<Statement> {
817817 |( dst, src, addr, size) | Statement :: FfMStoreFromCmpSignal { dst, src, addr, size } ) ,
818818 "ff.return" => preceded( space1, parse_ff_expression)
819819 . map( |value| Statement :: FfReturn { value } ) ,
820+ "ff.extend_i64" => preceded( space1, parse_i64_operand)
821+ . map( |value| Statement :: FfExtendI64 { value } ) ,
820822 "ff.mcall" => {
821823 |i: & mut & str | {
822824 // Parse the function name prefixed with $
@@ -934,12 +936,26 @@ fn parse_i64_expression(input: &mut &str) -> ModalResult<I64Expr> {
934936 . map( |( op1, op2) | I64Expr :: Sub ( Box :: new( op1) , Box :: new( op2) ) ) ,
935937 "i64.mul" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
936938 . map( |( op1, op2) | I64Expr :: Mul ( Box :: new( op1) , Box :: new( op2) ) ) ,
939+ "i64.div" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
940+ . map( |( op1, op2) | I64Expr :: Div ( Box :: new( op1) , Box :: new( op2) ) ) ,
941+ "i64.pow" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
942+ . map( |( op1, op2) | I64Expr :: Pow ( Box :: new( op1) , Box :: new( op2) ) ) ,
943+ "i64.rem" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
944+ . map( |( op1, op2) | I64Expr :: Rem ( Box :: new( op1) , Box :: new( op2) ) ) ,
945+ "i64.and" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
946+ . map( |( op1, op2) | I64Expr :: And ( Box :: new( op1) , Box :: new( op2) ) ) ,
947+ "i64.or" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
948+ . map( |( op1, op2) | I64Expr :: Or ( Box :: new( op1) , Box :: new( op2) ) ) ,
937949 "i64.le" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
938950 . map( |( op1, op2) | I64Expr :: Lte ( Box :: new( op1) , Box :: new( op2) ) ) ,
939951 "i64.load" => preceded( space1, parse_i64_operand)
940952 . map( I64Expr :: Load ) ,
953+ "i64.store" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
954+ . map( |( op1, op2) | I64Expr :: Store ( Box :: new( op1) , Box :: new( op2) ) ) ,
941955 "i64.eq" => ( preceded( space1, parse_i64_operand) , preceded( space1, parse_i64_operand) )
942956 . map( |( op1, op2) | I64Expr :: Eq ( op1, op2) ) ,
957+ "i64.neq" => ( preceded( space1, parse_i64_operand) , preceded( space1, parse_i64_operand) )
958+ . map( |( op1, op2) | I64Expr :: Neq ( op1, op2) ) ,
943959 "i64.eqz" => preceded( space1, parse_i64_operand)
944960 . map( I64Expr :: Eqz ) ,
945961 "i64.lt" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
@@ -948,8 +964,27 @@ fn parse_i64_expression(input: &mut &str) -> ModalResult<I64Expr> {
948964 . map( |( op1, op2) | I64Expr :: Gte ( Box :: new( op1) , Box :: new( op2) ) ) ,
949965 "i64.gt" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
950966 . map( |( op1, op2) | I64Expr :: Gt ( Box :: new( op1) , Box :: new( op2) ) ) ,
967+ "i64.shl" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
968+ . map( |( op1, op2) | I64Expr :: Shl ( Box :: new( op1) , Box :: new( op2) ) ) ,
969+ "i64.shr" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
970+ . map( |( op1, op2) | I64Expr :: Shr ( Box :: new( op1) , Box :: new( op2) ) ) ,
971+ "i64.bnot" => preceded( space1, parse_i64_operand)
972+ . map( I64Expr :: BNot ) ,
973+ "i64.bxor" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
974+ . map( |( op1, op2) | I64Expr :: BXor ( Box :: new( op1) , Box :: new( op2) ) ) ,
975+ "i64.bor" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
976+ . map( |( op1, op2) | I64Expr :: BOr ( Box :: new( op1) , Box :: new( op2) ) ) ,
977+ "i64.band" => ( preceded( space1, parse_i64_expression) , preceded( space1, parse_i64_expression) )
978+ . map( |( op1, op2) | I64Expr :: BAnd ( Box :: new( op1) , Box :: new( op2) ) ) ,
951979 "i64.wrap_ff" => preceded( space1, parse_ff_expr)
952980 . map( |expr| I64Expr :: Wrap ( Box :: new( expr) ) ) ,
981+ "i64.return" => preceded( space1, parse_i64_operand)
982+ . map( I64Expr :: Return ) ,
983+ "i64.mreturn" => (
984+ preceded( space1, parse_i64_operand) ,
985+ preceded( space1, parse_i64_operand) ,
986+ preceded( space1, parse_i64_operand) )
987+ . map( |( op1, op2, op3) | I64Expr :: MReturn { dst: op1, src: op2, size: op3 } ) ,
953988 "get_template_id" => preceded( space1, parse_i64_operand)
954989 . map( I64Expr :: GetTemplateId ) ,
955990 "get_template_signal_type" => (
0 commit comments