forked from MightyPork/crsn
				
			
							parent
							
								
									3a8895b790
								
							
						
					
					
						commit
						8ea60f52eb
					
				| @ -1,65 +0,0 @@ | |||||||
| //! Mask applied to a data source or destination
 |  | ||||||
| 
 |  | ||||||
| use crate::asm::error::AsmError; |  | ||||||
| 
 |  | ||||||
| /// Bit mask to apply to a value
 |  | ||||||
| #[derive(Debug, Clone, Copy, Eq, PartialEq)] |  | ||||||
| pub struct Mask { |  | ||||||
|     /// Length of the selected bit slice
 |  | ||||||
|     len: u8, |  | ||||||
|     /// Offset of the selected bit slice from bit zero
 |  | ||||||
|     offset: u8, |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| impl Default for Mask { |  | ||||||
|     fn default() -> Self { |  | ||||||
|         Mask { |  | ||||||
|             len: 64, |  | ||||||
|             offset: 0, |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| impl Mask { |  | ||||||
|     pub const BYTE: Mask = Mask { |  | ||||||
|         len: 8, |  | ||||||
|         offset: 0, |  | ||||||
|     }; |  | ||||||
|     pub const HALF_WORD: Mask = Mask { |  | ||||||
|         len: 16, |  | ||||||
|         offset: 0, |  | ||||||
|     }; |  | ||||||
|     pub const WORD: Mask = Mask { |  | ||||||
|         len: 32, |  | ||||||
|         offset: 0, |  | ||||||
|     }; |  | ||||||
|     pub const DOUBLE_WORD: Mask = Mask { |  | ||||||
|         len: 64, |  | ||||||
|         offset: 0, |  | ||||||
|     }; |  | ||||||
|     pub const FULL: Mask = Self::DOUBLE_WORD; |  | ||||||
| 
 |  | ||||||
|     pub fn new(len: u8, offset: u8) -> Result<Self, AsmError> { |  | ||||||
|         if len == 0 || offset >= 64 { |  | ||||||
|             // create the invalid mask to display it in the error
 |  | ||||||
|             return Err(AsmError::BadMask(Mask { |  | ||||||
|                 len, |  | ||||||
|                 offset, |  | ||||||
|             })); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         Ok(Self { |  | ||||||
|             len: len.min(64 - offset), |  | ||||||
|             offset, |  | ||||||
|         }) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /// Get a binary mask representing the span
 |  | ||||||
|     pub fn as_bitmask(self) -> u64 { |  | ||||||
|         ((1 << self.len) - 1) << self.offset |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     pub fn is_default(self) -> bool { |  | ||||||
|         self == Self::default() |  | ||||||
|     } |  | ||||||
| } |  | ||||||
					Loading…
					
					
				
		Reference in new issue