Skip to main content

osom_encoders_x86_64/models/
immediate8.rs

1#![allow(clippy::cast_sign_loss, clippy::cast_possible_wrap)]
2
3/// Represents an 8-bit immediate value.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[repr(transparent)]
6#[must_use]
7pub struct Immediate8 {
8    value: u8,
9}
10
11impl Immediate8 {
12    #[inline(always)]
13    pub const fn from_u8(value: u8) -> Self {
14        Self { value }
15    }
16
17    #[inline(always)]
18    pub const fn from_i8(value: i8) -> Self {
19        Self { value: value as u8 }
20    }
21
22    #[inline(always)]
23    #[must_use]
24    pub const fn as_u8(self) -> u8 {
25        self.value
26    }
27
28    #[inline(always)]
29    #[must_use]
30    pub const fn as_i8(self) -> i8 {
31        self.value as i8
32    }
33
34    #[inline(always)]
35    #[must_use]
36    pub const fn encode(self) -> [u8; 1] {
37        [self.value]
38    }
39
40    #[inline(always)]
41    #[must_use]
42    pub const fn equals(self, other: Self) -> bool {
43        self.as_u8() == other.as_u8()
44    }
45}
46
47impl From<u8> for Immediate8 {
48    fn from(value: u8) -> Self {
49        Self::from_u8(value)
50    }
51}
52
53impl From<Immediate8> for u8 {
54    fn from(value: Immediate8) -> Self {
55        value.as_u8()
56    }
57}
58
59impl From<i8> for Immediate8 {
60    fn from(value: i8) -> Self {
61        Self::from_i8(value)
62    }
63}
64
65impl From<Immediate8> for i8 {
66    fn from(value: Immediate8) -> Self {
67        value.as_i8()
68    }
69}