Skip to content

Commit dde909c

Browse files
author
dbanks12
committed
featBrillig and AVM default all uninitialized memory cells to Field 0
1 parent 7872d09 commit dde909c

File tree

30 files changed

+137
-127
lines changed

30 files changed

+137
-127
lines changed

avm-transpiler/src/instructions.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,13 @@ impl Default for AvmInstruction {
8888
#[allow(clippy::upper_case_acronyms, dead_code)]
8989
#[derive(Copy, Clone, Debug)]
9090
pub enum AvmTypeTag {
91-
UNINITIALIZED,
91+
FIELD,
9292
UINT1,
9393
UINT8,
9494
UINT16,
9595
UINT32,
9696
UINT64,
9797
UINT128,
98-
FIELD,
9998
INVALID,
10099
}
101100

avm-transpiler/src/transpile.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,5 @@ fn tag_from_bit_size(bit_size: BitSize) -> AvmTypeTag {
15261526
BitSize::Integer(IntegerBitSize::U64) => AvmTypeTag::UINT64,
15271527
BitSize::Integer(IntegerBitSize::U128) => AvmTypeTag::UINT128,
15281528
BitSize::Field => AvmTypeTag::FIELD,
1529-
_ => panic!("The AVM doesn't support integer bit size {:?}", bit_size),
15301529
}
15311530
}

barretenberg/cpp/pil/avm/alu.pil

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace alu(256);
1313
pol commit ic;
1414
pol commit sel_alu; // Predicate to activate the copy of intermediate registers to ALU table.
1515

16-
// Instruction tag (1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7: field) copied from Main table
16+
// Instruction tag copied from Main table (MEM_TAG enum defined in constants)
1717
pol commit in_tag;
1818

1919
// Flattened boolean instruction tags

barretenberg/cpp/pil/avm/constants_gen.pil

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ namespace constants(256);
1111
pol MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 16;
1212
pol MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL = 16;
1313
pol MAX_UNENCRYPTED_LOGS_PER_CALL = 4;
14+
pol MEM_TAG_FF = 0;
1415
pol MEM_TAG_U1 = 1;
1516
pol MEM_TAG_U8 = 2;
1617
pol MEM_TAG_U16 = 3;
1718
pol MEM_TAG_U32 = 4;
1819
pol MEM_TAG_U64 = 5;
1920
pol MEM_TAG_U128 = 6;
20-
pol MEM_TAG_FF = 7;
2121
pol SENDER_KERNEL_INPUTS_COL_OFFSET = 0;
2222
pol ADDRESS_KERNEL_INPUTS_COL_OFFSET = 1;
2323
pol STORAGE_ADDRESS_KERNEL_INPUTS_COL_OFFSET = 1;

barretenberg/cpp/pil/avm/main.pil

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ namespace main(256);
152152
// Helper selector to characterize a Binary chiplet selector
153153
pol commit sel_bin;
154154

155-
// Instruction memory tags read/write (1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7: field)
155+
// Instruction memory tags read/write (enum defined in constants)
156156
pol commit r_in_tag;
157157
pol commit w_in_tag;
158158
pol commit alu_in_tag; // Copy of r_in_tag or w_in_tag depending of the operation. It is sent to ALU trace.

barretenberg/cpp/pil/avm/mem.pil

+9-7
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace mem(256);
99
pol commit addr;
1010
pol commit space_id;
1111
pol commit glob_addr;
12-
pol commit tag; // Memory tag (0: uninitialized, 1: u1, 2: u8, 3: u16, 4: u32, 5: u64, 6: u128, 7:field)
12+
pol commit tag; // Memory tag (MEM_TAG enum defined in constants)
1313
pol commit val;
1414
pol commit rw; // Enum: 0 (read), 1 (write)
1515
pol commit lastAccess; // Boolean (1 when this row is the last of a given address)
@@ -175,13 +175,16 @@ namespace mem(256);
175175
#[MEM_READ_WRITE_TAG_CONSISTENCY]
176176
(1 - lastAccess) * (1 - rw') * (tag' - tag) = 0;
177177

178+
// If this is the last row that an address is accessed, the next row must be the first access of another address.
178179
// Constrain that the first load from a given address has value 0. (Consistency of memory initialization.)
179-
// We do not constrain that the tag == 0 as the 0 value is compatible with any memory type.
180180
// As we enforce lastAccess = 1 on the first row, the following condition applies also for the first memory entry:
181181
#[MEM_ZERO_INIT]
182182
lastAccess * (1 - rw') * val' = 0;
183+
// Constrain that reading an uninitialized cell creates tag error unless it is expected to be of type FF.
184+
#[MEM_ZERO_INIT_TAG_FF]
185+
lastAccess * (1 - rw') * (tag' - constants.MEM_TAG_FF) = 0;
183186

184-
// TODO: Verfiy that skip_check_tag cannot be enabled maliciously by the prover.
187+
// TODO: Verify that skip_check_tag cannot be enabled maliciously by the prover.
185188
// Skip check tag enabled for some MOV opcodes and RETURN opcode (sel_op_slice)
186189
#[SKIP_CHECK_TAG]
187190
skip_check_tag = sel_op_slice;
@@ -199,14 +202,13 @@ namespace mem(256);
199202
// instead of (r_in_tag - tag)^(-1) as this allows to store zero by default (i.e., when tag_err == 0).
200203
// The new column one_min_inv is set to 1 - (r_in_tag - tag)^(-1) when tag_err == 1
201204
// but must be set to 0 when tags are matching and tag_err = 0
202-
// Relaxation: This relation is relaxed when skip_check_tag is enabled or for
203-
// uninitialized memory, i.e. tag == 0.
205+
// Relaxation: This relation is relaxed when skip_check_tag is enabled
204206
#[MEM_IN_TAG_CONSISTENCY_1]
205-
tag * (1 - skip_check_tag) * (1 - rw) * ((r_in_tag - tag) * (1 - one_min_inv) - tag_err) = 0;
207+
(1 - skip_check_tag) * (1 - rw) * ((r_in_tag - tag) * (1 - one_min_inv) - tag_err) = 0;
206208
// TODO: Try to decrease the degree of the above relation, e.g., skip_check_tag might be consolidated
207209
// with tag == 0 and rw == 1.
208210
#[MEM_IN_TAG_CONSISTENCY_2]
209-
tag * (1 - tag_err) * one_min_inv = 0;
211+
(1 - tag_err) * one_min_inv = 0;
210212

211213
#[NO_TAG_ERR_WRITE_OR_SKIP]
212214
(skip_check_tag + rw) * tag_err = 0;

barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/alu.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ template <typename FF_> class aluImpl {
2121
[[maybe_unused]] const RelationParameters<FF>&,
2222
[[maybe_unused]] const FF& scaling_factor)
2323
{
24+
const auto constants_MEM_TAG_FF = FF(0);
2425
const auto constants_MEM_TAG_U1 = FF(1);
2526
const auto constants_MEM_TAG_U8 = FF(2);
2627
const auto constants_MEM_TAG_U16 = FF(3);
2728
const auto constants_MEM_TAG_U32 = FF(4);
2829
const auto constants_MEM_TAG_U64 = FF(5);
2930
const auto constants_MEM_TAG_U128 = FF(6);
30-
const auto constants_MEM_TAG_FF = FF(7);
3131
const auto alu_MAX_BITS =
3232
((((((new_term.alu_u1_tag * FF(1)) + (new_term.alu_u8_tag * FF(8))) + (new_term.alu_u16_tag * FF(16))) +
3333
(new_term.alu_u32_tag * FF(32))) +

barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/main.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ template <typename FF_> class mainImpl {
2323
[[maybe_unused]] const RelationParameters<FF>&,
2424
[[maybe_unused]] const FF& scaling_factor)
2525
{
26+
const auto constants_MEM_TAG_FF = FF(0);
2627
const auto constants_MEM_TAG_U1 = FF(1);
27-
const auto constants_MEM_TAG_FF = FF(7);
2828
const auto constants_misc_INTERNAL_CALL_SPACE_ID = FF(255);
2929
const auto main_KERNEL_INPUT_SELECTORS =
3030
(((((((((((new_term.main_sel_op_address + new_term.main_sel_op_storage_address) +

barretenberg/cpp/src/barretenberg/vm/avm/generated/relations/mem.hpp

+46-37
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@ template <typename FF_> class memImpl {
1010
public:
1111
using FF = FF_;
1212

13-
static constexpr std::array<size_t, 52> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
14-
2, 3, 4, 3, 4, 3, 3, 2, 3, 3, 4, 4, 4,
15-
4, 2, 6, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
16-
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
13+
static constexpr std::array<size_t, 53> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
14+
3, 4, 3, 4, 3, 3, 2, 3, 3, 4, 4, 4, 4, 4,
15+
2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
16+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 };
1717

1818
template <typename ContainerOverSubrelations, typename AllEntities>
1919
void static accumulate(ContainerOverSubrelations& evals,
2020
const AllEntities& new_term,
2121
[[maybe_unused]] const RelationParameters<FF>&,
2222
[[maybe_unused]] const FF& scaling_factor)
2323
{
24+
const auto constants_MEM_TAG_FF = FF(0);
2425
const auto constants_MEM_TAG_U32 = FF(4);
25-
const auto constants_MEM_TAG_FF = FF(7);
2626
const auto mem_SEL_DIRECT_MEM_OP_A =
2727
((new_term.mem_sel_op_a + new_term.mem_sel_op_poseidon_read_a) + new_term.mem_sel_op_poseidon_write_a);
2828
const auto mem_SEL_DIRECT_MEM_OP_B =
@@ -218,156 +218,163 @@ template <typename FF_> class memImpl {
218218
}
219219
{
220220
using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>;
221-
auto tmp = (new_term.mem_skip_check_tag - new_term.mem_sel_op_slice);
221+
auto tmp = ((new_term.mem_lastAccess * (FF(1) - new_term.mem_rw_shift)) *
222+
(new_term.mem_tag_shift - constants_MEM_TAG_FF));
222223
tmp *= scaling_factor;
223224
std::get<27>(evals) += typename Accumulator::View(tmp);
224225
}
225226
{
226227
using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>;
227-
auto tmp = (((new_term.mem_tag * (FF(1) - new_term.mem_skip_check_tag)) * (FF(1) - new_term.mem_rw)) *
228-
(((new_term.mem_r_in_tag - new_term.mem_tag) * (FF(1) - new_term.mem_one_min_inv)) -
229-
new_term.mem_tag_err));
228+
auto tmp = (new_term.mem_skip_check_tag - new_term.mem_sel_op_slice);
230229
tmp *= scaling_factor;
231230
std::get<28>(evals) += typename Accumulator::View(tmp);
232231
}
233232
{
234233
using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>;
235-
auto tmp = ((new_term.mem_tag * (FF(1) - new_term.mem_tag_err)) * new_term.mem_one_min_inv);
234+
auto tmp = (((FF(1) - new_term.mem_skip_check_tag) * (FF(1) - new_term.mem_rw)) *
235+
(((new_term.mem_r_in_tag - new_term.mem_tag) * (FF(1) - new_term.mem_one_min_inv)) -
236+
new_term.mem_tag_err));
236237
tmp *= scaling_factor;
237238
std::get<29>(evals) += typename Accumulator::View(tmp);
238239
}
239240
{
240241
using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>;
241-
auto tmp = ((new_term.mem_skip_check_tag + new_term.mem_rw) * new_term.mem_tag_err);
242+
auto tmp = ((FF(1) - new_term.mem_tag_err) * new_term.mem_one_min_inv);
242243
tmp *= scaling_factor;
243244
std::get<30>(evals) += typename Accumulator::View(tmp);
244245
}
245246
{
246247
using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>;
247-
auto tmp = (new_term.mem_rw * (new_term.mem_w_in_tag - new_term.mem_tag));
248+
auto tmp = ((new_term.mem_skip_check_tag + new_term.mem_rw) * new_term.mem_tag_err);
248249
tmp *= scaling_factor;
249250
std::get<31>(evals) += typename Accumulator::View(tmp);
250251
}
251252
{
252253
using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>;
253-
auto tmp = (new_term.mem_rw * new_term.mem_tag_err);
254+
auto tmp = (new_term.mem_rw * (new_term.mem_w_in_tag - new_term.mem_tag));
254255
tmp *= scaling_factor;
255256
std::get<32>(evals) += typename Accumulator::View(tmp);
256257
}
257258
{
258259
using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>;
259-
auto tmp = (new_term.mem_sel_resolve_ind_addr_a * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
260+
auto tmp = (new_term.mem_rw * new_term.mem_tag_err);
260261
tmp *= scaling_factor;
261262
std::get<33>(evals) += typename Accumulator::View(tmp);
262263
}
263264
{
264265
using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>;
265-
auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
266+
auto tmp = (new_term.mem_sel_resolve_ind_addr_a * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
266267
tmp *= scaling_factor;
267268
std::get<34>(evals) += typename Accumulator::View(tmp);
268269
}
269270
{
270271
using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>;
271-
auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
272+
auto tmp = (new_term.mem_sel_resolve_ind_addr_b * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
272273
tmp *= scaling_factor;
273274
std::get<35>(evals) += typename Accumulator::View(tmp);
274275
}
275276
{
276277
using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>;
277-
auto tmp = (new_term.mem_sel_resolve_ind_addr_d * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
278+
auto tmp = (new_term.mem_sel_resolve_ind_addr_c * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
278279
tmp *= scaling_factor;
279280
std::get<36>(evals) += typename Accumulator::View(tmp);
280281
}
281282
{
282283
using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>;
283-
auto tmp = (new_term.mem_sel_resolve_ind_addr_a * new_term.mem_rw);
284+
auto tmp = (new_term.mem_sel_resolve_ind_addr_d * (new_term.mem_r_in_tag - constants_MEM_TAG_U32));
284285
tmp *= scaling_factor;
285286
std::get<37>(evals) += typename Accumulator::View(tmp);
286287
}
287288
{
288289
using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>;
289-
auto tmp = (new_term.mem_sel_resolve_ind_addr_b * new_term.mem_rw);
290+
auto tmp = (new_term.mem_sel_resolve_ind_addr_a * new_term.mem_rw);
290291
tmp *= scaling_factor;
291292
std::get<38>(evals) += typename Accumulator::View(tmp);
292293
}
293294
{
294295
using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>;
295-
auto tmp = (new_term.mem_sel_resolve_ind_addr_c * new_term.mem_rw);
296+
auto tmp = (new_term.mem_sel_resolve_ind_addr_b * new_term.mem_rw);
296297
tmp *= scaling_factor;
297298
std::get<39>(evals) += typename Accumulator::View(tmp);
298299
}
299300
{
300301
using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>;
301-
auto tmp = (new_term.mem_sel_resolve_ind_addr_d * new_term.mem_rw);
302+
auto tmp = (new_term.mem_sel_resolve_ind_addr_c * new_term.mem_rw);
302303
tmp *= scaling_factor;
303304
std::get<40>(evals) += typename Accumulator::View(tmp);
304305
}
305306
{
306307
using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>;
307-
auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
308+
auto tmp = (new_term.mem_sel_resolve_ind_addr_d * new_term.mem_rw);
308309
tmp *= scaling_factor;
309310
std::get<41>(evals) += typename Accumulator::View(tmp);
310311
}
311312
{
312313
using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>;
313-
auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
314+
auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
314315
tmp *= scaling_factor;
315316
std::get<42>(evals) += typename Accumulator::View(tmp);
316317
}
317318
{
318319
using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>;
319-
auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
320+
auto tmp = (new_term.mem_sel_op_slice * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
320321
tmp *= scaling_factor;
321322
std::get<43>(evals) += typename Accumulator::View(tmp);
322323
}
323324
{
324325
using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>;
325-
auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
326+
auto tmp = (new_term.mem_sel_op_poseidon_read_a * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
326327
tmp *= scaling_factor;
327328
std::get<44>(evals) += typename Accumulator::View(tmp);
328329
}
329330
{
330331
using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>;
331-
auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
332+
auto tmp = (new_term.mem_sel_op_poseidon_read_b * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
332333
tmp *= scaling_factor;
333334
std::get<45>(evals) += typename Accumulator::View(tmp);
334335
}
335336
{
336337
using Accumulator = typename std::tuple_element_t<46, ContainerOverSubrelations>;
337-
auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
338+
auto tmp = (new_term.mem_sel_op_poseidon_read_c * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
338339
tmp *= scaling_factor;
339340
std::get<46>(evals) += typename Accumulator::View(tmp);
340341
}
341342
{
342343
using Accumulator = typename std::tuple_element_t<47, ContainerOverSubrelations>;
343-
auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
344+
auto tmp = (new_term.mem_sel_op_poseidon_read_d * (new_term.mem_w_in_tag - constants_MEM_TAG_FF));
344345
tmp *= scaling_factor;
345346
std::get<47>(evals) += typename Accumulator::View(tmp);
346347
}
347348
{
348349
using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>;
349-
auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
350+
auto tmp = (new_term.mem_sel_op_poseidon_write_a * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
350351
tmp *= scaling_factor;
351352
std::get<48>(evals) += typename Accumulator::View(tmp);
352353
}
353354
{
354355
using Accumulator = typename std::tuple_element_t<49, ContainerOverSubrelations>;
355-
auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
356+
auto tmp = (new_term.mem_sel_op_poseidon_write_b * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
356357
tmp *= scaling_factor;
357358
std::get<49>(evals) += typename Accumulator::View(tmp);
358359
}
359360
{
360361
using Accumulator = typename std::tuple_element_t<50, ContainerOverSubrelations>;
361-
auto tmp = (new_term.mem_sel_op_poseidon_write_d * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
362+
auto tmp = (new_term.mem_sel_op_poseidon_write_c * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
362363
tmp *= scaling_factor;
363364
std::get<50>(evals) += typename Accumulator::View(tmp);
364365
}
365366
{
366367
using Accumulator = typename std::tuple_element_t<51, ContainerOverSubrelations>;
367-
auto tmp = ((new_term.mem_sel_mov_ia_to_ic + new_term.mem_sel_mov_ib_to_ic) * new_term.mem_tag_err);
368+
auto tmp = (new_term.mem_sel_op_poseidon_write_d * (new_term.mem_r_in_tag - constants_MEM_TAG_FF));
368369
tmp *= scaling_factor;
369370
std::get<51>(evals) += typename Accumulator::View(tmp);
370371
}
372+
{
373+
using Accumulator = typename std::tuple_element_t<52, ContainerOverSubrelations>;
374+
auto tmp = ((new_term.mem_sel_mov_ia_to_ic + new_term.mem_sel_mov_ib_to_ic) * new_term.mem_tag_err);
375+
tmp *= scaling_factor;
376+
std::get<52>(evals) += typename Accumulator::View(tmp);
377+
}
371378
}
372379
};
373380

@@ -399,16 +406,18 @@ template <typename FF> class mem : public Relation<memImpl<FF>> {
399406
case 26:
400407
return "MEM_ZERO_INIT";
401408
case 27:
402-
return "SKIP_CHECK_TAG";
409+
return "MEM_ZERO_INIT_TAG_FF";
403410
case 28:
404-
return "MEM_IN_TAG_CONSISTENCY_1";
411+
return "SKIP_CHECK_TAG";
405412
case 29:
406-
return "MEM_IN_TAG_CONSISTENCY_2";
413+
return "MEM_IN_TAG_CONSISTENCY_1";
407414
case 30:
415+
return "MEM_IN_TAG_CONSISTENCY_2";
416+
case 31:
408417
return "NO_TAG_ERR_WRITE_OR_SKIP";
409-
case 32:
418+
case 33:
410419
return "NO_TAG_ERR_WRITE";
411-
case 51:
420+
case 52:
412421
return "MOV_SAME_TAG";
413422
}
414423
return std::to_string(index);

0 commit comments

Comments
 (0)