summaryrefslogtreecommitdiffstats
path: root/compiler/stable_mir/src/target.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/stable_mir/src/target.rs')
-rw-r--r--compiler/stable_mir/src/target.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/compiler/stable_mir/src/target.rs b/compiler/stable_mir/src/target.rs
new file mode 100644
index 000000000..41ec205cf
--- /dev/null
+++ b/compiler/stable_mir/src/target.rs
@@ -0,0 +1,50 @@
+//! Provide information about the machine that this is being compiled into.
+
+use crate::compiler_interface::with;
+
+/// The properties of the target machine being compiled into.
+#[derive(Clone, PartialEq, Eq)]
+pub struct MachineInfo {
+ pub endian: Endian,
+ pub pointer_width: MachineSize,
+}
+
+impl MachineInfo {
+ pub fn target() -> MachineInfo {
+ with(|cx| cx.target_info())
+ }
+
+ pub fn target_endianess() -> Endian {
+ with(|cx| cx.target_info().endian)
+ }
+
+ pub fn target_pointer_width() -> MachineSize {
+ with(|cx| cx.target_info().pointer_width)
+ }
+}
+
+#[derive(Copy, Clone, PartialEq, Eq)]
+pub enum Endian {
+ Little,
+ Big,
+}
+
+/// Represent the size of a component.
+#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
+pub struct MachineSize {
+ num_bits: usize,
+}
+
+impl MachineSize {
+ pub fn bytes(self) -> usize {
+ self.num_bits / 8
+ }
+
+ pub fn bits(self) -> usize {
+ self.num_bits
+ }
+
+ pub fn from_bits(num_bits: usize) -> MachineSize {
+ MachineSize { num_bits }
+ }
+}