Source file sail2_operators_bitlists.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
open Lem_pervasives_extra
open Lem_machine_word
open Sail2_values
open Sail2_operators
open Sail2_prompt_monad
open Sail2_prompt
let uint_maybe v:(Nat_big_num.num)option= (unsigned_of_bits (Lem_list.map (fun b->b) v))
let uint_fail dict_Sail2_values_Bitvector_a v:('c,(Nat_big_num.num),'b)monad= (maybe_fail "uint" (
dict_Sail2_values_Bitvector_a.unsigned_method v))
let uint_nondet dict_Sail2_values_Register_Value_b v:('b,(Nat_big_num.num),'a)monad= (bind
(bools_of_bits_nondet
dict_Sail2_values_Register_Value_b v) (fun bs ->
return (int_of_bools false bs)))
let uint v:Nat_big_num.num= (maybe_failwith (uint_maybe v))
let sint_maybe v:(Nat_big_num.num)option= (signed_of_bits (Lem_list.map (fun b->b) v))
let sint_fail dict_Sail2_values_Bitvector_a v:('c,(Nat_big_num.num),'b)monad= (maybe_fail "sint" (
dict_Sail2_values_Bitvector_a.signed_method v))
let sint_nondet dict_Sail2_values_Register_Value_b v:('b,(Nat_big_num.num),'a)monad= (bind
(bools_of_bits_nondet
dict_Sail2_values_Register_Value_b v) (fun bs ->
return (int_of_bools true bs)))
let sint v:Nat_big_num.num= (maybe_failwith (sint_maybe v))
let extz_vec:Nat_big_num.num ->(bitU)list ->(bitU)list=
(extz_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let exts_vec:Nat_big_num.num ->(bitU)list ->(bitU)list=
(exts_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let zero_extend bits len:(bitU)list= (extz_bits len bits)
let sign_extend bits len:(bitU)list= (exts_bits len bits)
let zeros len:(bitU)list= (repeat [B0] len)
let ones len:(bitU)list= (repeat [B1] len)
let vector_truncate bs len:(bitU)list= (extz_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) len bs)
let vector_truncateLSB bs len:(bitU)list= (take_list len bs)
let access_vec_inc:(bitU)list ->Nat_big_num.num ->bitU=
(access_bv_inc
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let access_vec_dec:(bitU)list ->Nat_big_num.num ->bitU=
(access_bv_dec
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let update_vec_inc:(bitU)list ->Nat_big_num.num ->bitU ->(bitU)list=
(update_bv_inc
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let update_vec_inc_maybe v i b:((bitU)list)option= (Some (update_vec_inc v i b))
let update_vec_inc_fail v i b:('b,((bitU)list),'a)monad= (return (update_vec_inc v i b))
let update_vec_inc_nondet v i b:('b,((bitU)list),'a)monad= (return (update_vec_inc v i b))
let update_vec_dec:(bitU)list ->Nat_big_num.num ->bitU ->(bitU)list=
(update_bv_dec
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let update_vec_dec_maybe v i b:((bitU)list)option= (Some (update_vec_dec v i b))
let update_vec_dec_fail v i b:('b,((bitU)list),'a)monad= (return (update_vec_dec v i b))
let update_vec_dec_nondet v i b:('b,((bitU)list),'a)monad= (return (update_vec_dec v i b))
let subrange_vec_inc:(bitU)list ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list=
(subrange_bv_inc
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let subrange_vec_dec:(bitU)list ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list=
(subrange_bv_dec
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let update_subrange_vec_inc:(bitU)list ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list ->(bitU)list=
(update_subrange_bv_inc
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict)
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let update_subrange_vec_dec:(bitU)list ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list ->(bitU)list=
(update_subrange_bv_dec
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict)
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let concat_vec:(bitU)list ->(bitU)list ->(bitU)list=
(concat_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict)
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let cons_vec:bitU ->(bitU)list ->(bitU)list=
(cons_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let cons_vec_maybe b v:((bitU)list)option= (Some (cons_vec b v))
let cons_vec_fail b v:('b,((bitU)list),'a)monad= (return (cons_vec b v))
let cons_vec_nondet b v:('b,((bitU)list),'a)monad= (return (cons_vec b v))
let cast_unit_vec:bitU ->(bitU)list= cast_unit_bv
let cast_unit_vec_maybe b:((bitU)list)option= (Some (cast_unit_vec b))
let cast_unit_vec_fail b:('b,((bitU)list),'a)monad= (return (cast_unit_vec b))
let cast_unit_vec_nondet b:('b,((bitU)list),'a)monad= (return (cast_unit_vec b))
let vec_of_bit:Nat_big_num.num ->bitU ->(bitU)list= bv_of_bit
let vec_of_bit_maybe len b:((bitU)list)option= (Some (vec_of_bit len b))
let vec_of_bit_fail len b:('b,((bitU)list),'a)monad= (return (vec_of_bit len b))
let vec_of_bit_nondet len b:('b,((bitU)list),'a)monad= (return (vec_of_bit len b))
let msb:(bitU)list ->bitU=
(most_significant
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let int_of_vec_maybe:bool ->(bitU)list ->(Nat_big_num.num)option=
(int_of_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let int_of_vec_fail sign v:('b,(Nat_big_num.num),'a)monad= (maybe_fail "int_of_vec" (int_of_vec_maybe sign v))
let int_of_vec_nondet dict_Sail2_values_Register_Value_b sign v:('b,(Nat_big_num.num),'a)monad= (bind (bools_of_bits_nondet
dict_Sail2_values_Register_Value_b v) (fun v -> return (int_of_bools sign v)))
let int_of_vec sign v:Nat_big_num.num= (maybe_failwith (int_of_vec_maybe sign v))
let string_of_bits:(bitU)list ->string=
(string_of_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let string_of_bits_subrange:(bitU)list ->Nat_big_num.num ->Nat_big_num.num ->string=
(string_of_bv_subrange
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let decimal_string_of_bits:(bitU)list ->string=
(decimal_string_of_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let and_vec:(bitU)list ->(bitU)list ->(bitU)list= (binop_list and_bit)
let or_vec:(bitU)list ->(bitU)list ->(bitU)list= (binop_list or_bit)
let xor_vec:(bitU)list ->(bitU)list ->(bitU)list= (binop_list xor_bit)
let not_vec:(bitU)list ->(bitU)list= (Lem_list.map not_bit)
let arith_op_double_bl dict_Sail2_values_Bitvector_a op sign l r:(bitU)list=
(let len = (Nat_big_num.mul( (Nat_big_num.of_int 2)) (
dict_Sail2_values_Bitvector_a.length_method l)) in
let l' = (if sign then exts_bv
dict_Sail2_values_Bitvector_a len l else extz_bv dict_Sail2_values_Bitvector_a len l) in
let r' = (if sign then exts_bv
dict_Sail2_values_Bitvector_a len r else extz_bv dict_Sail2_values_Bitvector_a len r) in
Lem_list.map (fun b->b) (arith_op_bits op sign (Lem_list.map (fun b->b) l') (Lem_list.map (fun b->b) r')))
let add_vec:(bitU)list ->(bitU)list ->(bitU)list= (fun l r->Lem_list.map (fun b->b) (arith_op_bits Nat_big_num.add false (Lem_list.map (fun b->b) l) (Lem_list.map (fun b->b) r)))
let adds_vec:(bitU)list ->(bitU)list ->(bitU)list= (fun l r->Lem_list.map (fun b->b) (arith_op_bits Nat_big_num.add true (Lem_list.map (fun b->b) l) (Lem_list.map (fun b->b) r)))
let sub_vec:(bitU)list ->(bitU)list ->(bitU)list= (fun l r->Lem_list.map (fun b->b) (arith_op_bits Nat_big_num.sub false (Lem_list.map (fun b->b) l) (Lem_list.map (fun b->b) r)))
let subs_vec:(bitU)list ->(bitU)list ->(bitU)list= (fun l r->Lem_list.map (fun b->b) (arith_op_bits Nat_big_num.sub true (Lem_list.map (fun b->b) l) (Lem_list.map (fun b->b) r)))
let mult_vec:(bitU)list ->(bitU)list ->(bitU)list= (arith_op_double_bl
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.mul false)
let mults_vec:(bitU)list ->(bitU)list ->(bitU)list= (arith_op_double_bl
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.mul true)
let add_vec_int l r:(bitU)list= (arith_op_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.add false l r)
let sub_vec_int l r:(bitU)list= (arith_op_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.sub false l r)
let mult_vec_int l r:(bitU)list= (arith_op_double_bl
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.mul false l (Lem_list.map (fun b->b) (bits_of_int (Nat_big_num.of_int (List.length l)) r)))
let add_int_vec l r:(bitU)list= (arith_op_int_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.add false l r)
let sub_int_vec l r:(bitU)list= (arith_op_int_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.sub false l r)
let mult_int_vec l r:(bitU)list= (arith_op_double_bl
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) Nat_big_num.mul false (Lem_list.map (fun b->b) (bits_of_int (Nat_big_num.of_int (List.length r)) l)) r)
let add_vec_bool dict_Sail2_values_Bitvector_a l r:'a= (arith_op_bv_bool
dict_Sail2_values_Bitvector_a Nat_big_num.add false l r)
let add_vec_bit_maybe dict_Sail2_values_Bitvector_a l r:'a option= (arith_op_bv_bit
dict_Sail2_values_Bitvector_a Nat_big_num.add false l r)
let add_vec_bit_fail dict_Sail2_values_Bitvector_a l r:('d,'a,'c)monad= (maybe_fail "add_vec_bit" (add_vec_bit_maybe
dict_Sail2_values_Bitvector_a l r))
let add_vec_bit_nondet dict_Sail2_values_Bitvector_a dict_Sail2_values_Register_Value_d l r:('d,'a,'c)monad= (bind (bool_of_bitU_nondet
dict_Sail2_values_Register_Value_d r) (fun r -> return (add_vec_bool
dict_Sail2_values_Bitvector_a l r)))
let add_vec_bit l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (add_vec_bit_maybe
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let adds_vec_bool dict_Sail2_values_Bitvector_a l r:'a= (arith_op_bv_bool
dict_Sail2_values_Bitvector_a Nat_big_num.add true l r)
let adds_vec_bit_maybe dict_Sail2_values_Bitvector_a l r:'a option= (arith_op_bv_bit
dict_Sail2_values_Bitvector_a Nat_big_num.add true l r)
let adds_vec_bit_fail dict_Sail2_values_Bitvector_a l r:('d,'a,'c)monad= (maybe_fail "adds_vec_bit" (adds_vec_bit_maybe
dict_Sail2_values_Bitvector_a l r))
let adds_vec_bit_nondet dict_Sail2_values_Bitvector_a dict_Sail2_values_Register_Value_d l r:('d,'a,'c)monad= (bind (bool_of_bitU_nondet
dict_Sail2_values_Register_Value_d r) (fun r -> return (adds_vec_bool
dict_Sail2_values_Bitvector_a l r)))
let adds_vec_bit l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (adds_vec_bit_maybe
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let sub_vec_bool dict_Sail2_values_Bitvector_a l r:'a= (arith_op_bv_bool
dict_Sail2_values_Bitvector_a Nat_big_num.sub false l r)
let sub_vec_bit_maybe dict_Sail2_values_Bitvector_a l r:'a option= (arith_op_bv_bit
dict_Sail2_values_Bitvector_a Nat_big_num.sub false l r)
let sub_vec_bit_fail dict_Sail2_values_Bitvector_a l r:('d,'a,'c)monad= (maybe_fail "sub_vec_bit" (sub_vec_bit_maybe
dict_Sail2_values_Bitvector_a l r))
let sub_vec_bit_nondet dict_Sail2_values_Bitvector_a dict_Sail2_values_Register_Value_d l r:('d,'a,'c)monad= (bind (bool_of_bitU_nondet
dict_Sail2_values_Register_Value_d r) (fun r -> return (sub_vec_bool
dict_Sail2_values_Bitvector_a l r)))
let sub_vec_bit l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (sub_vec_bit_maybe
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let subs_vec_bool dict_Sail2_values_Bitvector_a l r:'a= (arith_op_bv_bool
dict_Sail2_values_Bitvector_a Nat_big_num.sub true l r)
let subs_vec_bit_maybe dict_Sail2_values_Bitvector_a l r:'a option= (arith_op_bv_bit
dict_Sail2_values_Bitvector_a Nat_big_num.sub true l r)
let subs_vec_bit_fail dict_Sail2_values_Bitvector_a l r:('d,'a,'c)monad= (maybe_fail "sub_vec_bit" (subs_vec_bit_maybe
dict_Sail2_values_Bitvector_a l r))
let subs_vec_bit_nondet dict_Sail2_values_Bitvector_a dict_Sail2_values_Register_Value_d l r:('d,'a,'c)monad= (bind (bool_of_bitU_nondet
dict_Sail2_values_Register_Value_d r) (fun r -> return (subs_vec_bool
dict_Sail2_values_Bitvector_a l r)))
let subs_vec_bit l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (subs_vec_bit_maybe
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let shiftl:(bitU)list ->Nat_big_num.num ->(bitU)list=
(shiftl_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let shiftr:(bitU)list ->Nat_big_num.num ->(bitU)list=
(shiftr_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let arith_shiftr:(bitU)list ->Nat_big_num.num ->(bitU)list=
(arith_shiftr_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let rotl:(bitU)list ->Nat_big_num.num ->(bitU)list=
(rotl_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let rotr:(bitU)list ->Nat_big_num.num ->(bitU)list=
(rotr_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let mod_vec l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (mod_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let mod_vec_maybe l r:((bitU)list)option= (mod_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r)
let mod_vec_fail l r:('rv,((bitU)list),'e)monad= (maybe_fail "mod_vec" (mod_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let mod_vec_nondet dict_Sail2_values_Register_Value_rv l r:('rv,((bitU)list),'e)monad= (of_bits_nondet
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) dict_Sail2_values_Register_Value_rv (mod_vec l r))
let quot_vec l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (quot_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quot_vec_maybe l r:((bitU)list)option= (quot_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r)
let quot_vec_fail l r:('rv,((bitU)list),'e)monad= (maybe_fail "quot_vec" (quot_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quot_vec_nondet dict_Sail2_values_Register_Value_rv l r:('rv,((bitU)list),'e)monad= (of_bits_nondet
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) dict_Sail2_values_Register_Value_rv (quot_vec l r))
let quots_vec l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (quots_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quots_vec_maybe l r:((bitU)list)option= (quots_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r)
let quots_vec_fail l r:('rv,((bitU)list),'e)monad= (maybe_fail "quots_vec" (quots_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quots_vec_nondet dict_Sail2_values_Register_Value_rv l r:('rv,((bitU)list),'e)monad= (of_bits_nondet
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) dict_Sail2_values_Register_Value_rv (quots_vec l r))
let mod_vec_int l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (mod_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let mod_vec_int_maybe l r:((bitU)list)option= (mod_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r)
let mod_vec_int_fail l r:('rv,((bitU)list),'e)monad= (maybe_fail "mod_vec_int" (mod_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let mod_vec_int_nondet dict_Sail2_values_Register_Value_rv l r:('rv,((bitU)list),'e)monad= (of_bits_nondet
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) dict_Sail2_values_Register_Value_rv (mod_vec_int l r))
let quot_vec_int l r:(bitU)list= (Lem.option_default (repeat [BU] (Nat_big_num.of_int (List.length l))) (quot_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quot_vec_int_maybe l r:((bitU)list)option= (quot_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r)
let quot_vec_int_fail l r:('rv,((bitU)list),'e)monad= (maybe_fail "quot_vec_int" (quot_bv_int
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) (instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) l r))
let quot_vec_int_nondet dict_Sail2_values_Register_Value_rv l r:('rv,((bitU)list),'e)monad= (of_bits_nondet
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict) dict_Sail2_values_Register_Value_rv (quot_vec_int l r))
let replicate_bits:(bitU)list ->Nat_big_num.num ->(bitU)list=
(replicate_bits_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let duplicate:bitU ->Nat_big_num.num ->(bitU)list=
(duplicate_bit_bv instance_Sail2_values_BitU_Sail2_values_bitU_dict)
let duplicate_maybe b n:((bitU)list)option= (Some (duplicate b n))
let duplicate_fail b n:('b,((bitU)list),'a)monad= (return (duplicate b n))
let duplicate_nondet dict_Sail2_values_Register_Value_b b n:('b,((bitU)list),'a)monad= (bind
(bool_of_bitU_nondet
dict_Sail2_values_Register_Value_b b) (fun b ->
return (duplicate (bitU_of_bool b) n)))
let reverse_endianness v:(bitU)list= (reverse_endianness_list v)
let get_slice_int:Nat_big_num.num ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list=
(get_slice_int_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let set_slice_int:Nat_big_num.num ->Nat_big_num.num ->Nat_big_num.num ->(bitU)list ->Nat_big_num.num=
(set_slice_int_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let slice v lo len:(bitU)list=
(subrange_vec_dec v ( Nat_big_num.sub (Nat_big_num.add lo len)( (Nat_big_num.of_int 1))) lo)
let set_slice (_out_len:ii) (slice_len:ii) out (n:ii) v:(bitU)list=
(update_subrange_vec_dec out ( Nat_big_num.sub (Nat_big_num.add n slice_len)( (Nat_big_num.of_int 1))) n v)
let eq_vec:(bitU)list ->(bitU)list ->bool=
(eq_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))
let neq_vec:(bitU)list ->(bitU)list ->bool=
(neq_bv
(instance_Sail2_values_Bitvector_list_dict
instance_Sail2_values_BitU_Sail2_values_bitU_dict))