[libc-commits] [PATCH] D147180: [libc] Add LIBC_INLINE macro to RPC implementation
Joseph Huber via Phabricator via libc-commits
libc-commits at lists.llvm.org
Wed Mar 29 15:04:31 PDT 2023
jhuber6 updated this revision to Diff 509484.
jhuber6 added a comment.
Adding more LIBC_INLINE
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147180/new/
https://reviews.llvm.org/D147180
Files:
libc/src/__support/RPC/rpc.h
Index: libc/src/__support/RPC/rpc.h
===================================================================
--- libc/src/__support/RPC/rpc.h
+++ libc/src/__support/RPC/rpc.h
@@ -43,12 +43,17 @@
/// server. The process contains an inbox and an outbox used for signaling
/// ownership of the shared buffer.
struct Process {
+ LIBC_INLINE Process() = default;
+ LIBC_INLINE Process(const Process &) = default;
+ LIBC_INLINE Process &operator=(const Process &) = default;
+ LIBC_INLINE ~Process() = default;
+
cpp::Atomic<uint32_t> *inbox;
cpp::Atomic<uint32_t> *outbox;
Buffer *buffer;
/// Initialize the communication channels.
- void reset(void *inbox, void *outbox, void *buffer) {
+ LIBC_INLINE void reset(void *inbox, void *outbox, void *buffer) {
*this = {
reinterpret_cast<cpp::Atomic<uint32_t> *>(inbox),
reinterpret_cast<cpp::Atomic<uint32_t> *>(outbox),
@@ -59,12 +64,22 @@
/// The RPC client used to make requests to the server.
struct Client : public Process {
- template <typename F, typename U> void run(F fill, U use);
+ LIBC_INLINE Client() = default;
+ LIBC_INLINE Client(const Client &) = default;
+ LIBC_INLINE Client &operator=(const Client &) = default;
+ LIBC_INLINE ~Client() = default;
+
+ template <typename F, typename U> LIBC_INLINE void run(F fill, U use);
};
/// The RPC server used to respond to the client.
struct Server : public Process {
- template <typename W, typename C> bool handle(W work, C clean);
+ LIBC_INLINE Server() = default;
+ LIBC_INLINE Server(const Server &) = default;
+ LIBC_INLINE Server &operator=(const Server &) = default;
+ LIBC_INLINE ~Server() = default;
+
+ template <typename W, typename C> LIBC_INLINE bool handle(W work, C clean);
};
/// Run the RPC client protocol to communicate with the server. We perform the
@@ -73,7 +88,7 @@
/// - Wait until the inbox is 1.
/// - Apply \p use to the shared buffer and write 0 to the outbox.
/// - Wait until the inbox is 0.
-template <typename F, typename U> void Client::run(F fill, U use) {
+template <typename F, typename U> LIBC_INLINE void Client::run(F fill, U use) {
bool in = inbox->load(cpp::MemoryOrder::RELAXED);
bool out = outbox->load(cpp::MemoryOrder::RELAXED);
atomic_thread_fence(cpp::MemoryOrder::ACQUIRE);
@@ -112,7 +127,8 @@
/// - Apply \p work to the shared buffer and write 1 to the outbox.
/// - Wait until the inbox is 0.
/// - Apply \p clean to the shared buffer and write 0 to the outbox.
-template <typename W, typename C> bool Server::handle(W work, C clean) {
+template <typename W, typename C>
+LIBC_INLINE bool Server::handle(W work, C clean) {
bool in = inbox->load(cpp::MemoryOrder::RELAXED);
bool out = outbox->load(cpp::MemoryOrder::RELAXED);
atomic_thread_fence(cpp::MemoryOrder::ACQUIRE);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147180.509484.patch
Type: text/x-patch
Size: 2827 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230329/7e7941a1/attachment-0001.bin>
More information about the libc-commits
mailing list