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