[rtems commit] score: Optimize STATUS_BUILD()

Sebastian Huber sebh at rtems.org
Wed Feb 5 13:43:03 UTC 2020


Module:    rtems
Branch:    master
Commit:    bba1475bc50bb82465978cb8b4c11ebac1cb8956
Changeset: http://git.rtems.org/rtems/commit/?id=bba1475bc50bb82465978cb8b4c11ebac1cb8956

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Jan  2 11:31:48 2020 +0100

score: Optimize STATUS_BUILD()

Do not cast to unsigned int to avoid an unsigned long long enum type.
Use a multiplication/division instead to preserve the signedness of the
POSIX status.

---

 cpukit/include/rtems/score/status.h | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/cpukit/include/rtems/score/status.h b/cpukit/include/rtems/score/status.h
index fe1f0e8..b257ccc 100644
--- a/cpukit/include/rtems/score/status.h
+++ b/cpukit/include/rtems/score/status.h
@@ -49,9 +49,11 @@ typedef enum {
 
 /**
  * @brief Macro to build a status code from Classic and POSIX API parts.
+ *
+ * Uses a multiplication to preserve the signedness of the POSIX status.
  */
 #define STATUS_BUILD( classic_status, posix_status ) \
-  ( ( ( (unsigned int) ( posix_status ) ) << 8 ) | ( classic_status ) )
+  ( ( ( posix_status ) * 256 ) | ( classic_status ) )
 
 /**
  * @brief Macro to get the Classic API status code.
@@ -62,10 +64,10 @@ typedef enum {
 /**
  * @brief Macro to get the POSIX API status code.
  *
- * Performs an arithmetic shift to reconstruct a negative POSIX status.
+ * Uses a division to preserve the signedness of the POSIX status.
  */
 #define STATUS_GET_POSIX( status ) \
-  ( ( ( (int) ( status ) ) | 0xff ) >> 8 )
+  ( ( status ) / 256 )
 
 /**
  * @brief Status codes.



More information about the vc mailing list