@@ -141,9 +141,10 @@ impl AsmBuilder for FuelAsmBuilder<'_, '_> {
141
141
opcode : Either :: Left ( VirtualOp :: ADDI (
142
142
VirtualRegister :: Constant ( ConstantRegister :: FuncArg1 ) ,
143
143
VirtualRegister :: Constant ( ConstantRegister :: Zero ) ,
144
- VirtualImmediate12 {
145
- value : encoded_bytes. len ( ) as u16 ,
146
- } ,
144
+ VirtualImmediate12 :: new_unchecked (
145
+ encoded_bytes. len ( ) as u64 ,
146
+ "Error representing encoded_bytes length as 12-bit immediate" ,
147
+ ) ,
147
148
) ) ,
148
149
comment : format ! ( "get length of configurable {} default value" , name) ,
149
150
owning_span : None ,
@@ -153,9 +154,10 @@ impl AsmBuilder for FuelAsmBuilder<'_, '_> {
153
154
opcode : Either :: Left ( VirtualOp :: ADDI (
154
155
VirtualRegister :: Constant ( ConstantRegister :: FuncArg2 ) ,
155
156
VirtualRegister :: Constant ( ConstantRegister :: StackStartPointer ) ,
156
- VirtualImmediate12 {
157
- value : global. offset_in_bytes as u16 ,
158
- } ,
157
+ VirtualImmediate12 :: new_unchecked (
158
+ global. offset_in_bytes ,
159
+ "Error representing global offset as 12-bit immediate" ,
160
+ ) ,
159
161
) ) ,
160
162
comment : format ! ( "get pointer to configurable {} stack address" , name) ,
161
163
owning_span : None ,
@@ -698,7 +700,10 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
698
700
opcode : Either :: Left ( VirtualOp :: XORI (
699
701
res_reg. clone ( ) ,
700
702
res_reg. clone ( ) ,
701
- VirtualImmediate12 { value : 1 } ,
703
+ VirtualImmediate12 :: new_unchecked (
704
+ 1 ,
705
+ "Error representing 1 as 12-bit immediate" ,
706
+ ) ,
702
707
) ) ,
703
708
comment : "[bitcast to bool]: invert inverted boolean" . into ( ) ,
704
709
owning_span : self . md_mgr . val_to_span ( self . context , * instr_val) ,
@@ -1278,7 +1283,10 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1278
1283
opcode : Either :: Left ( VirtualOp :: MULI (
1279
1284
instr_reg. clone ( ) ,
1280
1285
instr_reg. clone ( ) ,
1281
- VirtualImmediate12 { value : 8u16 } ,
1286
+ VirtualImmediate12 :: new_unchecked (
1287
+ 8 ,
1288
+ "Error representing 8 as 12-bit immediate" ,
1289
+ ) ,
1282
1290
) ) ,
1283
1291
comment : "get byte offset to local from base" . into ( ) ,
1284
1292
owning_span : owning_span. clone ( ) ,
@@ -1345,9 +1353,10 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1345
1353
opcode : either:: Either :: Left ( VirtualOp :: ADDI (
1346
1354
addr_reg. clone ( ) ,
1347
1355
VirtualRegister :: Constant ( ConstantRegister :: StackStartPointer ) ,
1348
- VirtualImmediate12 {
1349
- value : g. offset_in_bytes as u16 ,
1350
- } ,
1356
+ VirtualImmediate12 :: new_unchecked (
1357
+ g. offset_in_bytes ,
1358
+ "offset must fit in 12 bits" ,
1359
+ ) ,
1351
1360
) ) ,
1352
1361
comment : format ! ( "get address of configurable {}" , name) ,
1353
1362
owning_span : self . md_mgr . val_to_span ( self . context , * addr_val) ,
@@ -1382,9 +1391,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1382
1391
opcode : either:: Either :: Left ( VirtualOp :: GTF (
1383
1392
instr_reg. clone ( ) ,
1384
1393
index_reg,
1385
- VirtualImmediate12 {
1386
- value : tx_field_id as u16 ,
1387
- } ,
1394
+ VirtualImmediate12 :: new_unchecked ( tx_field_id, "tx_field_id must fit in 12 bits" ) ,
1388
1395
) ) ,
1389
1396
comment : "get transaction field" . into ( ) ,
1390
1397
owning_span : self . md_mgr . val_to_span ( self . context , * instr_val) ,
@@ -1416,7 +1423,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1416
1423
opcode : Either :: Left ( VirtualOp :: LB (
1417
1424
instr_reg. clone ( ) ,
1418
1425
src_reg,
1419
- VirtualImmediate12 { value : 0 } ,
1426
+ VirtualImmediate12 :: new_unchecked ( 0 , "Zero must fit in 12 bits" ) ,
1420
1427
) ) ,
1421
1428
comment : "load byte" . into ( ) ,
1422
1429
owning_span,
@@ -1427,7 +1434,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1427
1434
opcode : Either :: Left ( VirtualOp :: LW (
1428
1435
instr_reg. clone ( ) ,
1429
1436
src_reg,
1430
- VirtualImmediate12 { value : 0 } ,
1437
+ VirtualImmediate12 :: new_unchecked ( 0 , "Zero must fit in 12 bits" ) ,
1431
1438
) ) ,
1432
1439
comment : "load word" . into ( ) ,
1433
1440
owning_span,
@@ -1479,9 +1486,10 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1479
1486
self . cur_bytecode . push ( Op {
1480
1487
opcode : Either :: Left ( VirtualOp :: MOVI (
1481
1488
len_reg. clone ( ) ,
1482
- VirtualImmediate18 {
1483
- value : byte_len as u32 ,
1484
- } ,
1489
+ VirtualImmediate18 :: new_unchecked (
1490
+ byte_len,
1491
+ "cannot fit byte length in 18 bits" ,
1492
+ ) ,
1485
1493
) ) ,
1486
1494
comment : "get data length for memory copy" . into ( ) ,
1487
1495
owning_span : owning_span. clone ( ) ,
@@ -1555,7 +1563,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1555
1563
opcode : Either :: Left ( VirtualOp :: LW (
1556
1564
ptr_reg. clone ( ) ,
1557
1565
log_val_reg. clone ( ) ,
1558
- VirtualImmediate12 { value : 0 } ,
1566
+ VirtualImmediate12 :: new_unchecked ( 0 , "zero must fit in 12 bits" ) ,
1559
1567
) ) ,
1560
1568
owning_span : owning_span. clone ( ) ,
1561
1569
comment : "load slice pointer for logging data" . into ( ) ,
@@ -1564,7 +1572,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1564
1572
opcode : Either :: Left ( VirtualOp :: LW (
1565
1573
size_reg. clone ( ) ,
1566
1574
log_val_reg. clone ( ) ,
1567
- VirtualImmediate12 { value : 1 } ,
1575
+ VirtualImmediate12 :: new_unchecked ( 1 , "one must fit in 12 bits" ) ,
1568
1576
) ) ,
1569
1577
owning_span : owning_span. clone ( ) ,
1570
1578
comment : "load slice size for logging data" . into ( ) ,
@@ -1675,7 +1683,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1675
1683
opcode : Either :: Left ( VirtualOp :: LW (
1676
1684
size_reg. clone ( ) ,
1677
1685
ret_reg. clone ( ) ,
1678
- VirtualImmediate12 { value : 1 } ,
1686
+ VirtualImmediate12 :: new_unchecked ( 1 , "one must fit in 12 bits" ) ,
1679
1687
) ) ,
1680
1688
owning_span : owning_span. clone ( ) ,
1681
1689
comment : "load size of returned slice" . into ( ) ,
@@ -1684,7 +1692,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
1684
1692
opcode : Either :: Left ( VirtualOp :: LW (
1685
1693
ret_reg. clone ( ) ,
1686
1694
ret_reg. clone ( ) ,
1687
- VirtualImmediate12 { value : 0 } ,
1695
+ VirtualImmediate12 :: new_unchecked ( 0 , "zero must fit in 12 bits" ) ,
1688
1696
) ) ,
1689
1697
owning_span : owning_span. clone ( ) ,
1690
1698
comment : "load pointer to returned slice" . into ( ) ,
@@ -2004,7 +2012,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
2004
2012
opcode : Either :: Left ( VirtualOp :: SB (
2005
2013
dst_reg,
2006
2014
val_reg,
2007
- VirtualImmediate12 { value : 0 } ,
2015
+ VirtualImmediate12 :: new_unchecked ( 0 , "Zero must fit in 12 bits" ) ,
2008
2016
) ) ,
2009
2017
comment : "store byte" . into ( ) ,
2010
2018
owning_span,
@@ -2015,7 +2023,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
2015
2023
opcode : Either :: Left ( VirtualOp :: SW (
2016
2024
dst_reg,
2017
2025
val_reg,
2018
- VirtualImmediate12 { value : 0 } ,
2026
+ VirtualImmediate12 :: new_unchecked ( 0 , "Zero must fit in 12 bits" ) ,
2019
2027
) ) ,
2020
2028
comment : "store word" . into ( ) ,
2021
2029
owning_span,
@@ -2179,7 +2187,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
2179
2187
reg,
2180
2188
#[ allow( clippy:: unnecessary_unwrap) ]
2181
2189
base. unwrap ( ) . clone ( ) ,
2182
- VirtualImmediate12 { value : imm as u16 } ,
2190
+ VirtualImmediate12 :: new_unchecked ( imm , "immediate must fit in 12 bits" ) ,
2183
2191
) ) ,
2184
2192
comment : comment. into ( ) ,
2185
2193
owning_span : span,
@@ -2189,7 +2197,7 @@ impl<'ir, 'eng> FuelAsmBuilder<'ir, 'eng> {
2189
2197
self . cur_bytecode . push ( Op {
2190
2198
opcode : Either :: Left ( VirtualOp :: MOVI (
2191
2199
reg. clone ( ) ,
2192
- VirtualImmediate18 { value : imm as u32 } ,
2200
+ VirtualImmediate18 :: new_unchecked ( imm , "immediate must fit in 12 bits" ) ,
2193
2201
) ) ,
2194
2202
comment : comment. clone ( ) ,
2195
2203
owning_span : span. clone ( ) ,
0 commit comments