1
- use crate :: instruction:: address:: { AccessMode , Address } ;
2
- use crate :: num:: { MaskedU32 , MaskedU8 } ;
1
+ use crate :: num:: MaskedU8 ;
3
2
4
3
pub mod address;
5
4
pub mod vector;
6
5
pub mod branch;
7
6
pub mod encoding;
8
- mod register;
9
- mod arithmetic;
7
+ pub mod register;
8
+ pub mod arithmetic;
9
+ pub mod load_immediate;
10
10
11
11
pub type SegmentCode = MaskedU8 < 0x3 > ;
12
- pub type LargeImmediate = MaskedU32 < 0x1FFFFF > ;
13
12
pub type ScaleCode = MaskedU8 < 0x03 > ;
14
13
14
+ pub const STACK_SOURCE_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000011111 ) ;
15
+ pub const UNSTACK_DEST_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000011111 ) ;
16
+
17
+ pub const LOAD_IMMEDIATE_DESTINATION_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000011111 ) ;
18
+ pub const LOAD_IMMEDIATE_SEGMENT_MASK : ( u8 , u32 ) = ( 5 , 0b0000000000000000000001100000 ) ;
19
+ pub const LOAD_IMMEDIATE_OFFSET_MASK : ( u8 , u32 ) = ( 7 , 0b1111111111111111111110000000 ) ;
20
+
21
+ pub const BUILD_VECTOR_DESTINATION_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000011111 ) ;
22
+ pub const BUILD_VECTOR_COMPONENT_0_MASK : ( u8 , u32 ) = ( 5 , 0b0000000000000000001111100000 ) ;
23
+ pub const BUILD_VECTOR_COMPONENT_1_MASK : ( u8 , u32 ) = ( 10 , 0b0000000000000111110000000000 ) ;
24
+ pub const BUILD_VECTOR_COMPONENT_2_MASK : ( u8 , u32 ) = ( 15 , 0b0000000011111000000000000000 ) ;
25
+ pub const BUILD_VECTOR_COMPONENT_3_MASK : ( u8 , u32 ) = ( 20 , 0b0001111100000000000000000000 ) ;
26
+
27
+ pub const UNBUILD_VECTOR_SOURCE_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000011111 ) ;
28
+ pub const UNBUILD_VECTOR_DESTINATION_0_MASK : ( u8 , u32 ) = ( 5 , 0b0000000000000000001111100000 ) ;
29
+ pub const UNBUILD_VECTOR_DESTINATION_1_MASK : ( u8 , u32 ) = ( 10 , 0b0000000000000111110000000000 ) ;
30
+ pub const UNBUILD_VECTOR_DESTINATION_2_MASK : ( u8 , u32 ) = ( 15 , 0b0000000011111000000000000000 ) ;
31
+ pub const UNBUILD_VECTOR_DESTINATION_3_MASK : ( u8 , u32 ) = ( 20 , 0b0001111100000000000000000000 ) ;
32
+
33
+ pub const COPY_REGISTER_DESTINATION_FILE_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000000000011 ) ;
34
+ pub const COPY_REGISTER_DESTINATION_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000001111100 ) ;
35
+ pub const COPY_REGISTER_SOURCE_FILE_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000000000110000000 ) ;
36
+ pub const COPY_REGISTER_SOURCE_MASK : ( u8 , u32 ) = ( 0 , 0b0000000000000011111000000000 ) ;
37
+
15
38
#[ derive( Debug , Clone , Copy , PartialEq ) ]
16
39
pub enum Instruction {
17
40
None ,
@@ -26,8 +49,7 @@ pub enum Instruction {
26
49
27
50
LoadImmediate {
28
51
destination : register:: Code ,
29
- segment : SegmentCode ,
30
- immediate : LargeImmediate
52
+ segment : load_immediate:: Segment
31
53
} ,
32
54
BuildVector {
33
55
destination : register:: Code ,
0 commit comments