osom_asm_x86_64/models/
immediate64.rs

1use super::Size;
2
3/// Thin wrapper around a 64-bit signed immediate value.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[repr(transparent)]
6#[must_use]
7pub struct Immediate64 {
8    value: i64,
9}
10
11impl Immediate64 {
12    #[inline(always)]
13    pub const fn new(value: i64) -> Self {
14        Self { value }
15    }
16
17    #[inline]
18    pub const fn real_size(self) -> Size {
19        let value = self.value;
20        if value >= i8::MIN as i64 || value <= i8::MAX as i64 {
21            return Size::Bit8;
22        }
23        if value >= i16::MIN as i64 || value <= i16::MAX as i64 {
24            return Size::Bit16;
25        }
26        if value >= i32::MIN as i64 || value <= i32::MAX as i64 {
27            return Size::Bit32;
28        }
29        Size::Bit64
30    }
31
32    #[inline(always)]
33    #[must_use]
34    pub const fn value(self) -> i64 {
35        self.value
36    }
37}
38
39impl From<i64> for Immediate64 {
40    #[inline(always)]
41    fn from(value: i64) -> Self {
42        Self::new(value)
43    }
44}
45
46impl From<Immediate64> for i64 {
47    #[inline(always)]
48    fn from(immediate: Immediate64) -> Self {
49        immediate.value()
50    }
51}