osom_encoders_x86_64/models/
offset.rs1use super::{Immediate8, Immediate32};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy)]
15#[repr(u8)]
16#[must_use]
17pub enum Offset {
18 None = 0,
20
21 Bit8(Immediate8) = 1,
23
24 Bit32(Immediate32) = 2,
26}
27
28impl Offset {
29 #[inline(always)]
37 pub(crate) const fn to_sign_extended_imm32(self) -> Immediate32 {
38 match self {
39 Self::None => Immediate32::from_u32(0),
40 Self::Bit8(imm8) => Immediate32::from_imm8_sign_extended(imm8),
41 Self::Bit32(imm32) => imm32,
42 }
43 }
44
45 #[inline]
47 pub const fn from_i8(value: i8) -> Self {
48 Self::Bit8(Immediate8::from_i8(value))
49 }
50
51 #[inline]
53 pub const fn from_u8(value: u8) -> Self {
54 Self::Bit8(Immediate8::from_u8(value))
55 }
56
57 #[inline]
59 pub const fn from_i32(value: i32) -> Self {
60 Self::Bit32(Immediate32::from_i32(value))
61 }
62
63 #[inline]
65 pub const fn from_u32(value: u32) -> Self {
66 Self::Bit32(Immediate32::from_u32(value))
67 }
68}
69
70impl From<Immediate32> for Offset {
71 fn from(value: Immediate32) -> Self {
72 Self::Bit32(value)
73 }
74}
75
76impl From<Immediate8> for Offset {
77 fn from(value: Immediate8) -> Self {
78 Self::Bit8(value)
79 }
80}
81
82impl From<i32> for Offset {
83 fn from(value: i32) -> Self {
84 Self::Bit32(value.into())
85 }
86}
87
88impl From<i8> for Offset {
89 fn from(value: i8) -> Self {
90 Self::Bit8(value.into())
91 }
92}