fern_vm/arch.rs
1// Copyright (C) 2024 Ethan Uppal and Utku Melemetci. All rights reserved.
2
3use core::ops::Range;
4
5pub type Word = u32;
6pub type InstructionAddress = usize; // TODO: better name?
7pub type LocalAddress = u8;
8
9pub const fn bitmask(bits: usize) -> Word {
10 ((1 as Word) << bits).wrapping_sub(1)
11}
12
13pub const LOCAL_ADDRESS_BITS: usize = LocalAddress::BITS as usize;
14
15pub const LOCALS_SIZE: usize = 1usize << LOCAL_ADDRESS_BITS;
16pub const CODE_SIZE: usize = 1024;
17
18pub const ARGUMENT_LOCALS: Range<usize> = 0..8;
19pub const RETURN_LOCALS: Range<usize> = 0..2;