Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Member Functions | Public Attributes | List of all members
libsnark::ALU_gadget< FieldT > Class Template Reference

#include <alu_gadget.hpp>

Inheritance diagram for libsnark::ALU_gadget< FieldT >:
Inheritance graph
[legend]
Collaboration diagram for libsnark::ALU_gadget< FieldT >:
Collaboration graph
[legend]

Public Member Functions

 ALU_gadget (tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &pc, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable_array< FieldT > &instruction_results, const pb_variable_array< FieldT > &instruction_flags, const std::string &annotation_prefix="")
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
- Public Member Functions inherited from libsnark::tinyram_standard_gadget< FieldT >
 tinyram_standard_gadget (tinyram_protoboard< FieldT > &pb, const std::string &annotation_prefix="")
 
- Public Member Functions inherited from libsnark::tinyram_gadget< FieldT >
 tinyram_gadget (tinyram_protoboard< FieldT > &pb, const std::string &annotation_prefix="")
 
- Public Member Functions inherited from libsnark::gadget< FieldT >
 gadget (protoboard< FieldT > &pb, const std::string &annotation_prefix)
 

Public Attributes

pb_variable_array< FieldT > opcode_indicators
 
word_variable_gadget< FieldT > pc
 
word_variable_gadget< FieldT > desval
 
word_variable_gadget< FieldT > arg1val
 
word_variable_gadget< FieldT > arg2val
 
pb_variable< FieldT > flag
 
pb_variable_array< FieldT > instruction_results
 
pb_variable_array< FieldT > instruction_flags
 

Additional Inherited Members

- Protected Attributes inherited from libsnark::tinyram_gadget< FieldT >
tinyram_protoboard< FieldT > & pb
 
- Protected Attributes inherited from libsnark::gadget< FieldT >
protoboard< FieldT > & pb
 
const std::string annotation_prefix
 

Detailed Description

template<typename FieldT>
class libsnark::ALU_gadget< FieldT >

Definition at line 24 of file alu_gadget.hpp.

Constructor & Destructor Documentation

◆ ALU_gadget()

template<typename FieldT >
libsnark::ALU_gadget< FieldT >::ALU_gadget ( tinyram_protoboard< FieldT > &  pb,
const pb_variable_array< FieldT > &  opcode_indicators,
const word_variable_gadget< FieldT > &  pc,
const word_variable_gadget< FieldT > &  desval,
const word_variable_gadget< FieldT > &  arg1val,
const word_variable_gadget< FieldT > &  arg2val,
const pb_variable< FieldT > &  flag,
const pb_variable_array< FieldT > &  instruction_results,
const pb_variable_array< FieldT > &  instruction_flags,
const std::string &  annotation_prefix = "" 
)
inline

Definition at line 39 of file alu_gadget.hpp.

50  : tinyram_standard_gadget<FieldT>(pb, annotation_prefix)
52  , pc(pc)
53  , desval(desval)
54  , arg1val(arg1val)
55  , arg2val(arg2val)
56  , flag(flag)
59  {
60  components.resize(1ul << pb.ap.opcode_width());
61 
62  /* arithmetic */
63  components[tinyram_opcode_AND].reset(new ALU_and_gadget<FieldT>(
64  pb,
66  desval,
67  arg1val,
68  arg2val,
69  flag,
72  FMT(this->annotation_prefix, " AND")));
73 
74  components[tinyram_opcode_OR].reset(new ALU_or_gadget<FieldT>(
75  pb,
77  desval,
78  arg1val,
79  arg2val,
80  flag,
83  FMT(this->annotation_prefix, " OR")));
84 
85  components[tinyram_opcode_XOR].reset(new ALU_xor_gadget<FieldT>(
86  pb,
88  desval,
89  arg1val,
90  arg2val,
91  flag,
94  FMT(this->annotation_prefix, " XOR")));
95 
96  components[tinyram_opcode_NOT].reset(new ALU_not_gadget<FieldT>(
97  pb,
99  desval,
100  arg1val,
101  arg2val,
102  flag,
105  FMT(this->annotation_prefix, " NOT")));
106 
107  components[tinyram_opcode_ADD].reset(new ALU_add_gadget<FieldT>(
108  pb,
110  desval,
111  arg1val,
112  arg2val,
113  flag,
116  FMT(this->annotation_prefix, " ADD")));
117 
118  components[tinyram_opcode_SUB].reset(new ALU_sub_gadget<FieldT>(
119  pb,
121  desval,
122  arg1val,
123  arg2val,
124  flag,
127  FMT(this->annotation_prefix, " SUB")));
128 
129  components[tinyram_opcode_MOV].reset(new ALU_mov_gadget<FieldT>(
130  pb,
132  desval,
133  arg1val,
134  arg2val,
135  flag,
138  FMT(this->annotation_prefix, " MOV")));
139 
140  components[tinyram_opcode_CMOV].reset(new ALU_cmov_gadget<FieldT>(
141  pb,
143  desval,
144  arg1val,
145  arg2val,
146  flag,
149  FMT(this->annotation_prefix, " CMOV")));
150 
151  components[tinyram_opcode_CMPA].reset(new ALU_cmp_gadget<FieldT>(
152  pb,
154  desval,
155  arg1val,
156  arg2val,
157  flag,
164  FMT(this->annotation_prefix, " CMP_unsigned")));
165 
166  components[tinyram_opcode_CMPG].reset(new ALU_cmps_gadget<FieldT>(
167  pb,
169  desval,
170  arg1val,
171  arg2val,
172  flag,
177  FMT(this->annotation_prefix, " CMP_signed")));
178 
179  components[tinyram_opcode_UMULH].reset(new ALU_umul_gadget<FieldT>(
180  pb,
182  desval,
183  arg1val,
184  arg2val,
185  flag,
190  FMT(this->annotation_prefix, " MUL_unsigned")));
191 
192  components[tinyram_opcode_SMULH].reset(new ALU_smul_gadget<FieldT>(
193  pb,
195  desval,
196  arg1val,
197  arg2val,
198  flag,
201  FMT(this->annotation_prefix, " MUL_signed")));
202 
203  components[tinyram_opcode_UDIV].reset(new ALU_divmod_gadget<FieldT>(
204  pb,
206  desval,
207  arg1val,
208  arg2val,
209  flag,
214  FMT(this->annotation_prefix, " DIV")));
215 
216  components[tinyram_opcode_SHR].reset(new ALU_shr_shl_gadget<FieldT>(
217  pb,
219  desval,
220  arg1val,
221  arg2val,
222  flag,
227  FMT(this->annotation_prefix, " SHR_SHL")));
228 
229  /* control flow */
230  components[tinyram_opcode_JMP].reset(new ALU_jmp_gadget<FieldT>(
231  pb,
232  pc,
233  arg2val,
234  flag,
236  FMT(this->annotation_prefix, " JMP")));
237 
238  components[tinyram_opcode_CJMP].reset(new ALU_cjmp_gadget<FieldT>(
239  pb,
240  pc,
241  arg2val,
242  flag,
244  FMT(this->annotation_prefix, " CJMP")));
245 
246  components[tinyram_opcode_CNJMP].reset(new ALU_cnjmp_gadget<FieldT>(
247  pb,
248  pc,
249  arg2val,
250  flag,
252  FMT(this->annotation_prefix, " CNJMP")));
253  }

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename FieldT >
void libsnark::ALU_gadget< FieldT >::generate_r1cs_constraints ( )
virtual

◆ generate_r1cs_witness()

template<typename FieldT >
void libsnark::ALU_gadget< FieldT >::generate_r1cs_witness ( )
virtual

Member Data Documentation

◆ arg1val

template<typename FieldT >
word_variable_gadget<FieldT> libsnark::ALU_gadget< FieldT >::arg1val

Definition at line 33 of file alu_gadget.hpp.

◆ arg2val

template<typename FieldT >
word_variable_gadget<FieldT> libsnark::ALU_gadget< FieldT >::arg2val

Definition at line 34 of file alu_gadget.hpp.

◆ desval

template<typename FieldT >
word_variable_gadget<FieldT> libsnark::ALU_gadget< FieldT >::desval

Definition at line 32 of file alu_gadget.hpp.

◆ flag

template<typename FieldT >
pb_variable<FieldT> libsnark::ALU_gadget< FieldT >::flag

Definition at line 35 of file alu_gadget.hpp.

◆ instruction_flags

template<typename FieldT >
pb_variable_array<FieldT> libsnark::ALU_gadget< FieldT >::instruction_flags

Definition at line 37 of file alu_gadget.hpp.

◆ instruction_results

template<typename FieldT >
pb_variable_array<FieldT> libsnark::ALU_gadget< FieldT >::instruction_results

Definition at line 36 of file alu_gadget.hpp.

◆ opcode_indicators

template<typename FieldT >
pb_variable_array<FieldT> libsnark::ALU_gadget< FieldT >::opcode_indicators

Definition at line 30 of file alu_gadget.hpp.

◆ pc

template<typename FieldT >
word_variable_gadget<FieldT> libsnark::ALU_gadget< FieldT >::pc

Definition at line 31 of file alu_gadget.hpp.


The documentation for this class was generated from the following file:
libsnark::tinyram_opcode_SHL
@ tinyram_opcode_SHL
Definition: tinyram_aux.hpp:38
libsnark::ALU_gadget::instruction_results
pb_variable_array< FieldT > instruction_results
Definition: alu_gadget.hpp:36
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::tinyram_opcode_JMP
@ tinyram_opcode_JMP
Definition: tinyram_aux.hpp:50
libsnark::tinyram_opcode_CMPA
@ tinyram_opcode_CMPA
Definition: tinyram_aux.hpp:42
libsnark::tinyram_opcode_UMOD
@ tinyram_opcode_UMOD
Definition: tinyram_aux.hpp:37
libsnark::tinyram_opcode_CMPE
@ tinyram_opcode_CMPE
Definition: tinyram_aux.hpp:41
libsnark::tinyram_opcode_CMPGE
@ tinyram_opcode_CMPGE
Definition: tinyram_aux.hpp:45
libsnark::tinyram_opcode_MOV
@ tinyram_opcode_MOV
Definition: tinyram_aux.hpp:47
libsnark::tinyram_opcode_CMOV
@ tinyram_opcode_CMOV
Definition: tinyram_aux.hpp:48
libsnark::tinyram_opcode_SUB
@ tinyram_opcode_SUB
Definition: tinyram_aux.hpp:32
libsnark::tinyram_opcode_UMULH
@ tinyram_opcode_UMULH
Definition: tinyram_aux.hpp:34
libsnark::tinyram_opcode_SMULH
@ tinyram_opcode_SMULH
Definition: tinyram_aux.hpp:35
libsnark::tinyram_opcode_AND
@ tinyram_opcode_AND
Definition: tinyram_aux.hpp:27
libsnark::tinyram_opcode_MULL
@ tinyram_opcode_MULL
Definition: tinyram_aux.hpp:33
libsnark::ALU_gadget::opcode_indicators
pb_variable_array< FieldT > opcode_indicators
Definition: alu_gadget.hpp:30
libsnark::tinyram_opcode_SHR
@ tinyram_opcode_SHR
Definition: tinyram_aux.hpp:39
libsnark::tinyram_opcode_XOR
@ tinyram_opcode_XOR
Definition: tinyram_aux.hpp:29
libsnark::tinyram_opcode_CMPAE
@ tinyram_opcode_CMPAE
Definition: tinyram_aux.hpp:43
libsnark::tinyram_opcode_CNJMP
@ tinyram_opcode_CNJMP
Definition: tinyram_aux.hpp:52
libsnark::tinyram_opcode_NOT
@ tinyram_opcode_NOT
Definition: tinyram_aux.hpp:30
libsnark::ALU_gadget::arg1val
word_variable_gadget< FieldT > arg1val
Definition: alu_gadget.hpp:33
libsnark::ALU_gadget::desval
word_variable_gadget< FieldT > desval
Definition: alu_gadget.hpp:32
libsnark::tinyram_opcode_CMPG
@ tinyram_opcode_CMPG
Definition: tinyram_aux.hpp:44
libsnark::tinyram_gadget::pb
tinyram_protoboard< FieldT > & pb
Definition: tinyram_protoboard.hpp:34
libsnark::ALU_gadget::arg2val
word_variable_gadget< FieldT > arg2val
Definition: alu_gadget.hpp:34
libsnark::tinyram_opcode_CJMP
@ tinyram_opcode_CJMP
Definition: tinyram_aux.hpp:51
libsnark::ALU_gadget::instruction_flags
pb_variable_array< FieldT > instruction_flags
Definition: alu_gadget.hpp:37
libsnark::ALU_gadget::flag
pb_variable< FieldT > flag
Definition: alu_gadget.hpp:35
libsnark::tinyram_opcode_UDIV
@ tinyram_opcode_UDIV
Definition: tinyram_aux.hpp:36
libsnark::tinyram_opcode_ADD
@ tinyram_opcode_ADD
Definition: tinyram_aux.hpp:31
libsnark::ALU_gadget::pc
word_variable_gadget< FieldT > pc
Definition: alu_gadget.hpp:31
libsnark::tinyram_opcode_OR
@ tinyram_opcode_OR
Definition: tinyram_aux.hpp:28