// Copyright (C) Microsoft Corporation. All rights reserved.

//! Imports and re-exports architecture-specific implementations.

mod aarch64;
mod x86_64;

cfg_if::cfg_if!(
    if #[cfg(target_arch = "x86_64")] {
        pub use x86_64::msr;
        pub use x86_64::serial::InstrIoAccess;
        pub use x86_64::serial::IoAccess;
        use x86_64 as arch;
    } else if #[cfg(target_arch = "aarch64")] {
        use aarch64 as arch;
    } else {
        compile_error!("target_arch is not supported");
    }
);

pub(crate) use arch::enlightened_panic::write_crash_reg;
pub use arch::hypercall;
pub use arch::intrinsics::dead_loop;
pub use arch::intrinsics::fault;
pub(crate) use arch::reftime::reference_time;
pub use arch::serial::Serial;
