[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC 05/13] rust: add a bit operation binding for deposit64
From: |
Zhao Liu |
Subject: |
[RFC 05/13] rust: add a bit operation binding for deposit64 |
Date: |
Thu, 5 Dec 2024 14:07:06 +0800 |
The bindgen supports `static inline` function binding since v0.64.0 as
an experimental feature (`--wrap-static-fns`), and stabilizes it after
v0.70.0.
But the oldest version of bindgen supported by QEMU is v0.60.1, so
there's no way to generate the binding for deposit64() which is `static
inline` (in include/qemu/bitops.h).
Manually implement a binding. Since it only involves bit operations,
fortunately, the Rust version of deposit64() is almost identical to the
original C version.
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
---
rust/qemu-api/meson.build | 1 +
rust/qemu-api/src/bitops.rs | 11 +++++++++++
rust/qemu-api/src/lib.rs | 1 +
3 files changed, 13 insertions(+)
create mode 100644 rust/qemu-api/src/bitops.rs
diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build
index 3ac69cbc76c4..00e86a679d8a 100644
--- a/rust/qemu-api/meson.build
+++ b/rust/qemu-api/meson.build
@@ -16,6 +16,7 @@ _qemu_api_rs = static_library(
[
'src/lib.rs',
'src/bindings.rs',
+ 'src/bitops.rs',
'src/cell.rs',
'src/c_str.rs',
'src/irq.rs',
diff --git a/rust/qemu-api/src/bitops.rs b/rust/qemu-api/src/bitops.rs
new file mode 100644
index 000000000000..a11a07fb8830
--- /dev/null
+++ b/rust/qemu-api/src/bitops.rs
@@ -0,0 +1,11 @@
+// Copyright (C) 2024 Intel Corporation.
+// Author(s): Zhao Liu <zhai1.liu@intel.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+pub fn deposit64(value: u64, start: usize, length: usize, fieldval: u64) ->
u64 {
+ /* FIXME: Implement a more elegant check with error handling support? */
+ assert!(length > 0 && length <= 64 - start);
+
+ let mask = (u64::MAX >> (64 - length)) << start;
+ (value & !mask) | ((fieldval << start) & mask)
+}
diff --git a/rust/qemu-api/src/lib.rs b/rust/qemu-api/src/lib.rs
index 0d46b372c6bb..009906c907e7 100644
--- a/rust/qemu-api/src/lib.rs
+++ b/rust/qemu-api/src/lib.rs
@@ -7,6 +7,7 @@
#[rustfmt::skip]
pub mod bindings;
+pub mod bitops;
pub mod c_str;
pub mod cell;
pub mod irq;
--
2.34.1
[RFC 05/13] rust: add a bit operation binding for deposit64,
Zhao Liu <=
[RFC 06/13] rust: add bindings for memattrs, Zhao Liu, 2024/12/05
Re: [RFC 06/13] rust: add bindings for memattrs, Peter Maydell, 2024/12/06