osom_encoders_x86_64/models/
immediate32.rs1#![allow(clippy::cast_sign_loss, clippy::cast_possible_wrap)]
2
3use super::{Immediate8, Immediate16};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[repr(transparent)]
8#[must_use]
9pub struct Immediate32 {
10 value: u32,
11}
12
13impl Immediate32 {
14 #[inline(always)]
15 pub const fn from_imm8_zero_extended(value: Immediate8) -> Self {
16 Self::from_u32(value.as_u8() as u32)
17 }
18
19 #[inline(always)]
20 pub const fn from_imm8_sign_extended(value: Immediate8) -> Self {
21 Self::from_i32(value.as_i8() as i32)
22 }
23
24 #[inline(always)]
25 pub const fn from_imm16_zero_extended(value: Immediate16) -> Self {
26 Self::from_u32(value.as_u16() as u32)
27 }
28
29 #[inline(always)]
30 pub const fn from_imm16_sign_extended(value: Immediate16) -> Self {
31 Self::from_i32(value.as_i16() as i32)
32 }
33
34 #[inline(always)]
35 pub const fn from_u32(value: u32) -> Self {
36 Self { value }
37 }
38
39 #[inline(always)]
40 pub const fn from_i32(value: i32) -> Self {
41 Self { value: value as u32 }
42 }
43
44 #[inline(always)]
45 #[must_use]
46 pub const fn as_u32(self) -> u32 {
47 self.value
48 }
49
50 #[inline(always)]
51 #[must_use]
52 pub const fn as_i32(self) -> i32 {
53 self.value as i32
54 }
55
56 #[inline(always)]
57 #[must_use]
58 pub const fn encode(self) -> [u8; 4] {
59 self.value.to_le_bytes()
60 }
61
62 #[inline(always)]
63 #[must_use]
64 pub const fn equals(self, other: Self) -> bool {
65 self.as_u32() == other.as_u32()
66 }
67}
68
69impl From<u32> for Immediate32 {
70 fn from(value: u32) -> Self {
71 Self::from_u32(value)
72 }
73}
74
75impl From<Immediate32> for u32 {
76 fn from(value: Immediate32) -> Self {
77 value.as_u32()
78 }
79}
80
81impl From<i32> for Immediate32 {
82 fn from(value: i32) -> Self {
83 Self::from_i32(value)
84 }
85}
86
87impl From<Immediate32> for i32 {
88 fn from(value: Immediate32) -> Self {
89 value.as_i32()
90 }
91}