summary refs log tree commit diff stats
path: root/rust/qemu-api/src/bitops.rs
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2025-09-18 07:05:58 -0700
committerRichard Henderson <richard.henderson@linaro.org>2025-09-18 07:05:59 -0700
commitccafa85a97e38698b798115bba6c18c849846e25 (patch)
treea7d4941f050d4b621cffe2a71657a1bd39c35d4b /rust/qemu-api/src/bitops.rs
parentf0007b7f03e2d7fc33e71c3a582f2364c51a226b (diff)
parent00c0911c68e5bd664de1a261b74c390f4c0be83d (diff)
downloadfocaccia-qemu-ccafa85a97e38698b798115bba6c18c849846e25.tar.gz
focaccia-qemu-ccafa85a97e38698b798115bba6c18c849846e25.zip
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
* cpu-exec: more cleanups to CPU loop exits
* python: bump bundled Meson to 1.9.0
* rust: require Rust 1.83.0
* rust: temporarily remove from Ubuntu CI
* rust: vmstate: convert to use builder pattern
* rust: split "qemu-api" crate
* rust: rename qemu_api_macros -> qemu_macros
* rust: re-export qemu macros from other crates
* x86: fix functional test failure for Xen emulation
* x86: cleanups

# -----BEGIN PGP SIGNATURE-----
#
# iQFIBAABCgAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmjK6ZsUHHBib256aW5p
# QHJlZGhhdC5jb20ACgkQv/vSX3jHroNBKwf/aadInCT4vASOfpxbwZgYfYgR2m2m
# BJE9oYKxZJ6MlEOU/1Wfywf9fg4leMSh3XxkDKkEIL19yS6emwin8n3SNYrdAFn3
# 6u4IIWO4NI1Ht3NKytrqFk9wtbH9pAs/gVHLlnmpMxIqtOtZLumPAKNz8rlantmK
# UVDYL3Y0L4pD9i5FK1ObMNpk5AsWNr8Tr64fmb+nTkHutld3sBrEMCLI0+EByGyN
# lQ16sLn9PGqHOr210zuQP7wP2T3NCI3YokFSPQrUUL8LZGxRdXoNF4hI4uZDKGdn
# UbtRu9EkM052qzfsFMrEw5JSbdxEfIjKlPoFKseMv+aWvNAuximAraD3Vg==
# =Lr+x
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 17 Sep 2025 10:02:19 AM PDT
# gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
# gpg:                issuer "pbonzini@redhat.com"
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [unknown]
# gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [unknown]
# gpg: WARNING: The key's User ID is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
#      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83

* tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (60 commits)
  accel/kvm: Set guest_memfd_offset to non-zero value only when guest_memfd is valid
  accel/kvm: Zero out mem explicitly in kvm_set_user_memory_region()
  accel/kvm: Switch to check KVM_CAP_GUEST_MEMFD and KVM_CAP_USER_MEMORY2 on VM
  i386/kvm: Drop KVM_CAP_X86_SMM check in kvm_arch_init()
  multiboot: Fix the split lock
  target/i386: Define enum X86ASIdx for x86's address spaces
  i386/cpu: Enable SMM cpu address space under KVM
  hpet: guard IRQ handling with BQL
  rust: do not inline do_init_io
  rust: meson: remove unnecessary complication in device crates
  docs: update rust.rst
  rust: re-export qemu macros from common/qom/hwcore
  rust: re-export qemu_macros internal helper in "bits"
  rust: repurpose qemu_api -> tests
  rust/pl011: drop dependency on qemu_api
  rust/hpet: drop now unneeded qemu_api dep
  rust: rename qemu_api_macros -> qemu_macros
  rust: split "hwcore" crate
  rust: split "system" crate
  rust: split "chardev" crate
  ...

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'rust/qemu-api/src/bitops.rs')
-rw-r--r--rust/qemu-api/src/bitops.rs119
1 files changed, 0 insertions, 119 deletions
diff --git a/rust/qemu-api/src/bitops.rs b/rust/qemu-api/src/bitops.rs
deleted file mode 100644
index b1e3a530ab..0000000000
--- a/rust/qemu-api/src/bitops.rs
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright (C) 2024 Intel Corporation.
-// Author(s): Zhao Liu <zhao1.liu@intel.com>
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-//! This module provides bit operation extensions to integer types.
-//! It is usually included via the `qemu_api` prelude.
-
-use std::ops::{
-    Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign,
-    Mul, MulAssign, Not, Rem, RemAssign, Shl, ShlAssign, Shr, ShrAssign,
-};
-
-/// Trait for extensions to integer types
-pub trait IntegerExt:
-    Add<Self, Output = Self> + AddAssign<Self> +
-    BitAnd<Self, Output = Self> + BitAndAssign<Self> +
-    BitOr<Self, Output = Self> + BitOrAssign<Self> +
-    BitXor<Self, Output = Self> + BitXorAssign<Self> +
-    Copy +
-    Div<Self, Output = Self> + DivAssign<Self> +
-    Eq +
-    Mul<Self, Output = Self> + MulAssign<Self> +
-    Not<Output = Self> + Ord + PartialOrd +
-    Rem<Self, Output = Self> + RemAssign<Self> +
-    Shl<Self, Output = Self> + ShlAssign<Self> +
-    Shl<u32, Output = Self> + ShlAssign<u32> + // add more as needed
-    Shr<Self, Output = Self> + ShrAssign<Self> +
-    Shr<u32, Output = Self> + ShrAssign<u32> // add more as needed
-{
-    const BITS: u32;
-    const MAX: Self;
-    const MIN: Self;
-    const ONE: Self;
-    const ZERO: Self;
-
-    #[inline]
-    #[must_use]
-    fn bit(start: u32) -> Self
-    {
-        debug_assert!(start < Self::BITS);
-
-        Self::ONE << start
-    }
-
-    #[inline]
-    #[must_use]
-    fn mask(start: u32, length: u32) -> Self
-    {
-        /* FIXME: Implement a more elegant check with error handling support? */
-        debug_assert!(start < Self::BITS && length > 0 && length <= Self::BITS - start);
-
-        (Self::MAX >> (Self::BITS - length)) << start
-    }
-
-    #[inline]
-    #[must_use]
-    fn deposit<U: IntegerExt>(self, start: u32, length: u32,
-                          fieldval: U) -> Self
-        where Self: From<U>
-    {
-        debug_assert!(length <= U::BITS);
-
-        let mask = Self::mask(start, length);
-        (self & !mask) | ((Self::from(fieldval) << start) & mask)
-    }
-
-    #[inline]
-    #[must_use]
-    fn extract(self, start: u32, length: u32) -> Self
-    {
-        let mask = Self::mask(start, length);
-        (self & mask) >> start
-    }
-}
-
-macro_rules! impl_num_ext {
-    ($type:ty) => {
-        impl IntegerExt for $type {
-            const BITS: u32 = <$type>::BITS;
-            const MAX: Self = <$type>::MAX;
-            const MIN: Self = <$type>::MIN;
-            const ONE: Self = 1;
-            const ZERO: Self = 0;
-        }
-    };
-}
-
-impl_num_ext!(u8);
-impl_num_ext!(u16);
-impl_num_ext!(u32);
-impl_num_ext!(u64);
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn test_deposit() {
-        assert_eq!(15u32.deposit(8, 8, 1u32), 256 + 15);
-        assert_eq!(15u32.deposit(8, 1, 255u8), 256 + 15);
-    }
-
-    #[test]
-    fn test_extract() {
-        assert_eq!(15u32.extract(2, 4), 3);
-    }
-
-    #[test]
-    fn test_bit() {
-        assert_eq!(u8::bit(7), 128);
-        assert_eq!(u32::bit(16), 0x10000);
-    }
-
-    #[test]
-    fn test_mask() {
-        assert_eq!(u8::mask(7, 1), 128);
-        assert_eq!(u32::mask(8, 8), 0xff00);
-    }
-}