Skip to content

Commit

Permalink
5290 - add constraint on eq output being u8 and unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jeanmon committed Mar 26, 2024
1 parent 97c519c commit 6c8f4b1
Show file tree
Hide file tree
Showing 8 changed files with 340 additions and 265 deletions.
5 changes: 5 additions & 0 deletions barretenberg/cpp/pil/avm/avm_main.pil
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ namespace avm_main(256);
// - ind_a, ind_b, ind_c to u32 type
// - 0 <= r_in_tag, w_in_tag <= 6 // Maybe not needed as probably derived by the operation decomposition.

//====== COMPARATOR OPCODES CONSTRAINTS =====================================
// Enforce that the tag for the ouput of EQ opcode is u8 (i.e. equal to 1).
#[EQ_OUTPUT_U8]
sel_op_eq * (w_in_tag - 1) = 0;

// Relation for division over the finite field
// If tag_err == 1 in a division, then ib == 0 and op_err == 1.
#[SUBOP_DIVISION_FF]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,77 +7,77 @@
namespace bb::Avm_vm {

template <typename FF> struct Avm_aluRow {
FF avm_alu_alu_u16_r5_shift{};
FF avm_alu_alu_u16_r2{};
FF avm_alu_alu_u16_r7_shift{};
FF avm_alu_alu_u16_r7{};
FF avm_alu_alu_u8_tag{};
FF avm_alu_alu_u16_r3_shift{};
FF avm_alu_alu_ib{};
FF avm_alu_alu_u8_r0{};
FF avm_alu_alu_u16_r0_shift{};
FF avm_alu_alu_op_sub{};
FF avm_alu_alu_u16_r1{};
FF avm_alu_alu_u16_r6{};
FF avm_alu_alu_u16_r6_shift{};
FF avm_alu_alu_u16_r2_shift{};
FF avm_alu_alu_u16_r5{};
FF avm_alu_alu_u32_tag{};
FF avm_alu_alu_u16_r4{};
FF avm_alu_alu_u8_r1{};
FF avm_alu_alu_cf{};
FF avm_alu_alu_sel{};
FF avm_alu_alu_op_eq{};
FF avm_alu_alu_u16_r3{};
FF avm_alu_alu_op_not{};
FF avm_alu_alu_u64_tag{};
FF avm_alu_alu_u8_tag{};
FF avm_alu_alu_u16_r5{};
FF avm_alu_alu_u16_r0{};
FF avm_alu_alu_u16_r0_shift{};
FF avm_alu_alu_u16_r6_shift{};
FF avm_alu_alu_in_tag{};
FF avm_alu_alu_ff_tag{};
FF avm_alu_alu_op_eq_diff_inv{};
FF avm_alu_alu_ia{};
FF avm_alu_alu_u16_r4{};
FF avm_alu_alu_ic{};
FF avm_alu_alu_u128_tag{};
FF avm_alu_alu_op_mul{};
FF avm_alu_alu_u8_r0{};
FF avm_alu_alu_op_add{};
FF avm_alu_alu_u16_tag{};
FF avm_alu_alu_u16_r3{};
FF avm_alu_alu_u16_r7{};
FF avm_alu_alu_u16_r1_shift{};
FF avm_alu_alu_op_not{};
FF avm_alu_alu_u16_r0{};
FF avm_alu_alu_u16_r4_shift{};
FF avm_alu_alu_u16_tag{};
FF avm_alu_alu_cf{};
FF avm_alu_alu_u16_r3_shift{};
FF avm_alu_alu_u16_r7_shift{};
FF avm_alu_alu_u32_tag{};
FF avm_alu_alu_op_sub{};
FF avm_alu_alu_u64_r0{};
FF avm_alu_alu_op_eq{};
FF avm_alu_alu_op_mul{};
FF avm_alu_alu_u64_tag{};
FF avm_alu_alu_u16_r5_shift{};
FF avm_alu_alu_u128_tag{};
FF avm_alu_alu_u16_r6{};
FF avm_alu_alu_u8_r1{};
FF avm_alu_alu_op_eq_diff_inv{};
FF avm_alu_alu_u16_r1{};
FF avm_alu_alu_ff_tag{};
FF avm_alu_alu_ia{};
FF avm_alu_alu_u16_r2{};
};

inline std::string get_relation_label_avm_alu(int index)
{
switch (index) {
case 9:
return "ALU_ADD_SUB_1";

case 17:
return "ALU_FF_NOT_XOR";

case 18:
return "ALU_OP_NOT";

case 20:
return "ALU_OP_EQ";

case 11:
return "ALU_MULTIPLICATION_FF";

case 10:
return "ALU_ADD_SUB_2";

case 19:
return "ALU_RES_IS_BOOL";
case 12:
return "ALU_MUL_COMMON_1";

case 13:
return "ALU_MUL_COMMON_2";

case 16:
return "ALU_MULTIPLICATION_OUT_U128";

case 12:
return "ALU_MUL_COMMON_1";
case 19:
return "ALU_RES_IS_BOOL";

case 9:
return "ALU_ADD_SUB_1";

case 18:
return "ALU_OP_NOT";

case 11:
return "ALU_MULTIPLICATION_FF";

case 10:
return "ALU_ADD_SUB_2";
}
return std::to_string(index);
}
Expand Down
Loading

0 comments on commit 6c8f4b1

Please sign in to comment.