asmkit/x86/features/
FSGSBASE.rs1use super::super::opcodes::*;
2use crate::core::emitter::*;
3use crate::core::operand::*;
4use crate::x86::assembler::*;
5use crate::x86::operands::*;
6
7const NOREG: Operand = Operand::new();
9
10pub trait RdfsbaseEmitter<A> {
23 fn rdfsbase(&mut self, op0: A);
24}
25
26impl<'a> RdfsbaseEmitter<Gpd> for Assembler<'a> {
27 fn rdfsbase(&mut self, op0: Gpd) {
28 self.emit(RDFSBASE32R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
29 }
30}
31
32impl<'a> RdfsbaseEmitter<Gpq> for Assembler<'a> {
33 fn rdfsbase(&mut self, op0: Gpq) {
34 self.emit(RDFSBASE64R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
35 }
36}
37
38pub trait RdgsbaseEmitter<A> {
51 fn rdgsbase(&mut self, op0: A);
52}
53
54impl<'a> RdgsbaseEmitter<Gpd> for Assembler<'a> {
55 fn rdgsbase(&mut self, op0: Gpd) {
56 self.emit(RDGSBASE32R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
57 }
58}
59
60impl<'a> RdgsbaseEmitter<Gpq> for Assembler<'a> {
61 fn rdgsbase(&mut self, op0: Gpq) {
62 self.emit(RDGSBASE64R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
63 }
64}
65
66pub trait WrfsbaseEmitter<A> {
79 fn wrfsbase(&mut self, op0: A);
80}
81
82impl<'a> WrfsbaseEmitter<Gpd> for Assembler<'a> {
83 fn wrfsbase(&mut self, op0: Gpd) {
84 self.emit(WRFSBASE32R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
85 }
86}
87
88impl<'a> WrfsbaseEmitter<Gpq> for Assembler<'a> {
89 fn wrfsbase(&mut self, op0: Gpq) {
90 self.emit(WRFSBASE64R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
91 }
92}
93
94pub trait WrgsbaseEmitter<A> {
107 fn wrgsbase(&mut self, op0: A);
108}
109
110impl<'a> WrgsbaseEmitter<Gpd> for Assembler<'a> {
111 fn wrgsbase(&mut self, op0: Gpd) {
112 self.emit(WRGSBASE32R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
113 }
114}
115
116impl<'a> WrgsbaseEmitter<Gpq> for Assembler<'a> {
117 fn wrgsbase(&mut self, op0: Gpq) {
118 self.emit(WRGSBASE64R, op0.as_operand(), &NOREG, &NOREG, &NOREG);
119 }
120}
121
122impl<'a> Assembler<'a> {
123 #[inline]
136 pub fn rdfsbase<A>(&mut self, op0: A)
137 where
138 Assembler<'a>: RdfsbaseEmitter<A>,
139 {
140 <Self as RdfsbaseEmitter<A>>::rdfsbase(self, op0);
141 }
142 #[inline]
155 pub fn rdgsbase<A>(&mut self, op0: A)
156 where
157 Assembler<'a>: RdgsbaseEmitter<A>,
158 {
159 <Self as RdgsbaseEmitter<A>>::rdgsbase(self, op0);
160 }
161 #[inline]
174 pub fn wrfsbase<A>(&mut self, op0: A)
175 where
176 Assembler<'a>: WrfsbaseEmitter<A>,
177 {
178 <Self as WrfsbaseEmitter<A>>::wrfsbase(self, op0);
179 }
180 #[inline]
193 pub fn wrgsbase<A>(&mut self, op0: A)
194 where
195 Assembler<'a>: WrgsbaseEmitter<A>,
196 {
197 <Self as WrgsbaseEmitter<A>>::wrgsbase(self, op0);
198 }
199}