Skip to content

Commit 7300281

Browse files
lanbonesjunyu0312
authored andcommitted
support uniarg
1 parent f5acf8c commit 7300281

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+3410
-3407
lines changed

crates/specs/src/configure_table.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use serde::Serialize;
44
// A wasm page size is 64KB
55
pub const WASM_BYTES_PER_PAGE: u64 = 64 * 1024_u64;
66

7-
const WASM_32_MAXIMAL_PAGES_DEFAULT: u32 = 65536;
7+
// Limit page size in u16 range
8+
pub const WASM_32_MAXIMAL_PAGES_DEFAULT: u32 = 65535;
89

910
#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
1011
pub struct ConfigureTable {

crates/specs/src/encode/br_table.rs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
use num_bigint::BigUint;
2+
use static_assertions::const_assert;
23

34
use crate::brtable::BrTableEntry;
45
use crate::brtable::ElemEntry;
56
use crate::brtable::IndirectClass;
6-
use crate::encode::COMMON_RANGE_OFFSET;
7+
use crate::encode::instruction_table::FID_BITS;
8+
use crate::encode::instruction_table::IID_BITS;
9+
use crate::encode::COMMON_RANGE_BITS;
710

811
use super::FromBn;
912

13+
const INDIRECT_CLASS_SHIFT: u32 = 192;
1014
lazy_static! {
11-
static ref INDIRECT_CLASS_SHIFT: BigUint = BigUint::from(1u64) << 192;
15+
static ref INDIRECT_CLASS_SHIFT_BN: BigUint = BigUint::from(1u64) << 192;
1216
}
1317

14-
pub(crate) const BR_TABLE_ENCODE_BOUNDARY: u32 = 224;
18+
pub const BR_TABLE_ENCODE_BOUNDARY: u32 = 224;
19+
// Tag only include 1 bit(BrTable or Elem)
20+
const_assert!(INDIRECT_CLASS_SHIFT < BR_TABLE_ENCODE_BOUNDARY);
1521

1622
pub fn encode_br_table_entry<T: FromBn>(
1723
fid: T,
@@ -21,16 +27,17 @@ pub fn encode_br_table_entry<T: FromBn>(
2127
keep: T,
2228
dst_pc: T,
2329
) -> T {
24-
const FID_SHIFT: u32 = IID_SHIFT + COMMON_RANGE_OFFSET;
25-
const IID_SHIFT: u32 = INDEX_SHIFT + COMMON_RANGE_OFFSET;
26-
const INDEX_SHIFT: u32 = DROP_SHIFT + COMMON_RANGE_OFFSET;
27-
const DROP_SHIFT: u32 = KEEP_SHIFT + COMMON_RANGE_OFFSET;
28-
const KEEP_SHIFT: u32 = DST_PC_SHIFT + COMMON_RANGE_OFFSET;
30+
const FID_SHIFT: u32 = IID_SHIFT + IID_BITS;
31+
const IID_SHIFT: u32 = INDEX_SHIFT + COMMON_RANGE_BITS;
32+
const INDEX_SHIFT: u32 = DROP_SHIFT + COMMON_RANGE_BITS;
33+
const DROP_SHIFT: u32 = KEEP_SHIFT + COMMON_RANGE_BITS;
34+
const KEEP_SHIFT: u32 = DST_PC_SHIFT + COMMON_RANGE_BITS;
2935
const DST_PC_SHIFT: u32 = 0;
3036

31-
assert!(FID_SHIFT + COMMON_RANGE_OFFSET <= BR_TABLE_ENCODE_BOUNDARY);
37+
assert!(FID_SHIFT + FID_BITS <= INDIRECT_CLASS_SHIFT);
3238

33-
T::from_bn(&(BigUint::from(IndirectClass::BrTable as u64))) * T::from_bn(&INDIRECT_CLASS_SHIFT)
39+
T::from_bn(&(BigUint::from(IndirectClass::BrTable as u64)))
40+
* T::from_bn(&INDIRECT_CLASS_SHIFT_BN)
3441
+ fid * T::from_bn(&(BigUint::from(1u64) << FID_SHIFT))
3542
+ iid * T::from_bn(&(BigUint::from(1u64) << IID_SHIFT))
3643
+ index * T::from_bn(&(BigUint::from(1u64) << INDEX_SHIFT))
@@ -40,15 +47,15 @@ pub fn encode_br_table_entry<T: FromBn>(
4047
}
4148

4249
pub fn encode_elem_entry<T: FromBn>(table_idx: T, type_idx: T, offset: T, func_idx: T) -> T {
43-
const TABLE_INDEX_SHIFT: u32 = TYPE_INDEX_SHIFT + COMMON_RANGE_OFFSET;
44-
const TYPE_INDEX_SHIFT: u32 = OFFSET_SHIFT + COMMON_RANGE_OFFSET;
45-
const OFFSET_SHIFT: u32 = FUNC_INDEX + COMMON_RANGE_OFFSET;
50+
const TABLE_INDEX_SHIFT: u32 = TYPE_INDEX_SHIFT + COMMON_RANGE_BITS;
51+
const TYPE_INDEX_SHIFT: u32 = OFFSET_SHIFT + COMMON_RANGE_BITS;
52+
const OFFSET_SHIFT: u32 = FUNC_INDEX + FID_BITS;
4653
const FUNC_INDEX: u32 = 0;
4754

48-
assert!(TABLE_INDEX_SHIFT + COMMON_RANGE_OFFSET <= BR_TABLE_ENCODE_BOUNDARY);
55+
assert!(TABLE_INDEX_SHIFT + COMMON_RANGE_BITS <= INDIRECT_CLASS_SHIFT);
4956

5057
T::from_bn(&(BigUint::from(IndirectClass::CallIndirect as u64)))
51-
* T::from_bn(&INDIRECT_CLASS_SHIFT)
58+
* T::from_bn(&INDIRECT_CLASS_SHIFT_BN)
5259
+ table_idx * T::from_bn(&(BigUint::from(1u64) << TABLE_INDEX_SHIFT))
5360
+ type_idx * T::from_bn(&(BigUint::from(1u64) << TYPE_INDEX_SHIFT))
5461
+ offset * T::from_bn(&(BigUint::from(1u64) << OFFSET_SHIFT))

crates/specs/src/encode/frame_table.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use num_bigint::BigUint;
22
use num_bigint::ToBigUint;
33

4-
use crate::encode::COMMON_RANGE_OFFSET;
4+
use crate::encode::COMMON_RANGE_BITS;
55
use crate::jtable::CalledFrameTableEntry;
66
use crate::jtable::FrameTableEntryInternal;
77
use crate::jtable::InheritedFrameTableEntry;
@@ -15,10 +15,10 @@ pub fn encode_frame_table_entry<T: FromBn>(
1515
fid: T,
1616
iid: T,
1717
) -> T {
18-
const FRAME_ID_SHIFT: u32 = LAST_JUMP_FRAME_ID_SHIFT + COMMON_RANGE_OFFSET;
19-
const LAST_JUMP_FRAME_ID_SHIFT: u32 = CALLEE_FID + COMMON_RANGE_OFFSET;
20-
const CALLEE_FID: u32 = FID_SHIFT + COMMON_RANGE_OFFSET;
21-
const FID_SHIFT: u32 = IID_SHIFT + COMMON_RANGE_OFFSET;
18+
const FRAME_ID_SHIFT: u32 = LAST_JUMP_FRAME_ID_SHIFT + COMMON_RANGE_BITS;
19+
const LAST_JUMP_FRAME_ID_SHIFT: u32 = CALLEE_FID + COMMON_RANGE_BITS;
20+
const CALLEE_FID: u32 = FID_SHIFT + COMMON_RANGE_BITS;
21+
const FID_SHIFT: u32 = IID_SHIFT + COMMON_RANGE_BITS;
2222
const IID_SHIFT: u32 = 0;
2323

2424
frame_id * T::from_bn(&(1u64.to_biguint().unwrap() << FRAME_ID_SHIFT))

crates/specs/src/encode/image_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::encode::instruction_table::INSTRUCTION_ENCODE_BOUNDARY;
88

99
use super::FromBn;
1010

11-
const CLASS_SHIFT: u32 = 224;
11+
const CLASS_SHIFT: u32 = 250;
1212

1313
#[derive(Clone, Copy)]
1414
pub enum ImageTableEncoder {
@@ -22,7 +22,7 @@ const_assert!(BR_TABLE_ENCODE_BOUNDARY <= CLASS_SHIFT);
2222
const_assert!(INIT_MEMORY_ENCODE_BOUNDARY <= CLASS_SHIFT);
2323

2424
lazy_static! {
25-
static ref INSTRUCTION_TAG: BigUint = (ImageTableEncoder::Instruction as u64)
25+
pub static ref INSTRUCTION_TAG: BigUint = (ImageTableEncoder::Instruction as u64)
2626
.to_biguint()
2727
.unwrap()
2828
<< CLASS_SHIFT;
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,32 @@
11
use num_bigint::BigUint;
22
use num_bigint::ToBigUint;
3+
use static_assertions::const_assert;
34

4-
use crate::encode::COMMON_RANGE_OFFSET;
55
use crate::itable::InstructionTableEntry;
66
use crate::itable::Opcode;
77
use crate::itable::OPCODE_SHIFT;
88

99
use super::FromBn;
1010

11-
pub(crate) const INSTRUCTION_ENCODE_BOUNDARY: u32 = 224;
11+
pub const INSTRUCTION_ENCODE_BOUNDARY: u32 = 250;
12+
pub(crate) const IID_BITS: u32 = 16;
13+
pub(crate) const FID_BITS: u32 = 16;
14+
const_assert!(OPCODE_SHIFT + IID_BITS + FID_BITS <= INSTRUCTION_ENCODE_BOUNDARY);
1215

1316
pub fn encode_instruction_table_entry<T: FromBn>(fid: T, iid: T, opcode: T) -> T {
14-
const FID_SHIFT: u32 = IID_SHIFT + COMMON_RANGE_OFFSET;
17+
const FID_SHIFT: u32 = IID_SHIFT + IID_BITS;
1518
const IID_SHIFT: u32 = OPCODE_SHIFT;
1619

17-
assert!(FID_SHIFT + COMMON_RANGE_OFFSET <= INSTRUCTION_ENCODE_BOUNDARY);
18-
1920
fid * T::from_bn(&(1u64.to_biguint().unwrap() << FID_SHIFT))
2021
+ iid * T::from_bn(&(1u64.to_biguint().unwrap() << IID_SHIFT))
2122
+ opcode
2223
}
2324

2425
impl InstructionTableEntry {
2526
pub(crate) fn encode(fid: u32, iid: u32, opcode: &Opcode) -> BigUint {
27+
assert!(fid <= 1 << FID_BITS);
28+
assert!(iid <= 1 << IID_BITS);
29+
2630
encode_instruction_table_entry(BigUint::from(fid), BigUint::from(iid), opcode.into())
2731
}
2832
}

crates/specs/src/encode/memory_table.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ use num_traits::One;
33
use static_assertions::const_assert;
44

55
use super::FromBn;
6-
use crate::encode::COMMON_RANGE_OFFSET;
6+
use crate::encode::COMMON_RANGE_BITS;
77

8-
const _END_SHIFT: u32 = OFFSET_SHIFT + COMMON_RANGE_OFFSET;
9-
const OFFSET_SHIFT: u32 = LOCATION_TYPE_SHIFT + COMMON_RANGE_OFFSET;
8+
const _END_SHIFT: u32 = OFFSET_SHIFT + COMMON_RANGE_BITS;
9+
const OFFSET_SHIFT: u32 = LOCATION_TYPE_SHIFT + COMMON_RANGE_BITS;
1010
const LOCATION_TYPE_SHIFT: u32 = IS_I32_SHIFT + 1;
1111
const IS_I32_SHIFT: u32 = 0;
1212

crates/specs/src/encode/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub mod instruction_table;
1313
pub mod memory_table;
1414
pub mod opcode;
1515

16-
pub(crate) const COMMON_RANGE_OFFSET: u32 = 32;
16+
pub(crate) const COMMON_RANGE_BITS: u32 = 32;
1717

1818
pub trait FromBn: Sized + Add<Self, Output = Self> + Mul<Self, Output = Self> {
1919
fn zero() -> Self;

0 commit comments

Comments
 (0)