[rtems-central commit] interface: Improve register bit field macros

Sebastian Huber sebh at rtems.org
Wed Mar 15 07:30:28 UTC 2023


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Mar 15 08:39:35 2023 +0100

interface: Improve register bit field macros

Update #4828.

---

 rtemsspec/interface.py            | 15 ++++++++-------
 rtemsspec/tests/test_interface.py | 30 ++++++++++++++++++------------
 2 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/rtemsspec/interface.py b/rtemsspec/interface.py
index 525746cb..d14dff92 100644
--- a/rtemsspec/interface.py
+++ b/rtemsspec/interface.py
@@ -577,20 +577,21 @@ class Node:
             width = bit["width"]
             end = start + width
             sfx = "ULL" if end > 32 else "U"
-            define = f"#define {prefix.upper()}{bit['name'].upper()}"
+            base = f"{prefix.upper()}{bit['name'].upper()}"
             if index != 0:
                 lines.append("")
             if width == 1:
                 val = 1 << start
-                lines.append(f"{define} {val:#x}{sfx}")
+                lines.append(f"#define {base} {val:#x}{sfx}")
             else:
                 mask = ((1 << width) - 1) << start
-                get = (1 << width) - 1
                 lines.extend([
-                    f"{define}_SHIFT {start}", f"{define}_MASK {mask:#x}{sfx}",
-                    f"{define}_GET( _reg ) \\",
-                    f"  ( ( ( _reg ) >> {start} ) & {get:#x}{sfx} )",
-                    f"{define}( _val ) ( ( _val ) << {start} )"
+                    f"#define {base}_SHIFT {start}",
+                    f"#define {base}_MASK {mask:#x}{sfx}",
+                    f"#define {base}_GET( _reg ) \\",
+                    f"  ( ( ( _reg ) & {base}_MASK ) >> {base}_SHIFT )",
+                    f"#define {base}( _val ) \\",
+                    f"  ( ( _val ) << {base}_SHIFT )"
                 ])
         return lines
 
diff --git a/rtemsspec/tests/test_interface.py b/rtemsspec/tests/test_interface.py
index f6be586b..40ad5f72 100644
--- a/rtemsspec/tests/test_interface.py
+++ b/rtemsspec/tests/test_interface.py
@@ -265,8 +265,9 @@ void Function6( int Param0 );
 #define IRQAMP_ITCNT_TCNT_SHIFT 0
 #define IRQAMP_ITCNT_TCNT_MASK 0xffffffffU
 #define IRQAMP_ITCNT_TCNT_GET( _reg ) \\
-  ( ( ( _reg ) >> 0 ) & 0xffffffffU )
-#define IRQAMP_ITCNT_TCNT( _val ) ( ( _val ) << 0 )
+  ( ( ( _reg ) & IRQAMP_ITCNT_TCNT_MASK ) >> IRQAMP_ITCNT_TCNT_SHIFT )
+#define IRQAMP_ITCNT_TCNT( _val ) \\
+  ( ( _val ) << IRQAMP_ITCNT_TCNT_SHIFT )
 
 /** @} */
 
@@ -282,8 +283,9 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPC_TSTAMP_SHIFT 27
 #define IRQAMP_ITSTMPC_TSTAMP_MASK 0xf8000000U
 #define IRQAMP_ITSTMPC_TSTAMP_GET( _reg ) \\
-  ( ( ( _reg ) >> 27 ) & 0x1fU )
-#define IRQAMP_ITSTMPC_TSTAMP( _val ) ( ( _val ) << 27 )
+  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSTAMP_MASK ) >> IRQAMP_ITSTMPC_TSTAMP_SHIFT )
+#define IRQAMP_ITSTMPC_TSTAMP( _val ) \\
+  ( ( _val ) << IRQAMP_ITSTMPC_TSTAMP_SHIFT )
 
 #define IRQAMP_ITSTMPC_S1 0x4000000U
 
@@ -294,8 +296,9 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPC_TSISEL_SHIFT 0
 #define IRQAMP_ITSTMPC_TSISEL_MASK 0x1fU
 #define IRQAMP_ITSTMPC_TSISEL_GET( _reg ) \\
-  ( ( ( _reg ) >> 0 ) & 0x1fU )
-#define IRQAMP_ITSTMPC_TSISEL( _val ) ( ( _val ) << 0 )
+  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSISEL_MASK ) >> IRQAMP_ITSTMPC_TSISEL_SHIFT )
+#define IRQAMP_ITSTMPC_TSISEL( _val ) \\
+  ( ( _val ) << IRQAMP_ITSTMPC_TSISEL_SHIFT )
 
 /** @} */
 
@@ -311,8 +314,9 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPAS_TASSERTION_SHIFT 0
 #define IRQAMP_ITSTMPAS_TASSERTION_MASK 0xffffffffU
 #define IRQAMP_ITSTMPAS_TASSERTION_GET( _reg ) \\
-  ( ( ( _reg ) >> 0 ) & 0xffffffffU )
-#define IRQAMP_ITSTMPAS_TASSERTION( _val ) ( ( _val ) << 0 )
+  ( ( ( _reg ) & IRQAMP_ITSTMPAS_TASSERTION_MASK ) >> IRQAMP_ITSTMPAS_TASSERTION_SHIFT )
+#define IRQAMP_ITSTMPAS_TASSERTION( _val ) \\
+  ( ( _val ) << IRQAMP_ITSTMPAS_TASSERTION_SHIFT )
 
 /** @} */
 
@@ -328,8 +332,9 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT 0
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK 0xffffffffU
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_GET( _reg ) \\
-  ( ( ( _reg ) >> 0 ) & 0xffffffffU )
-#define IRQAMP_ITSTMPAC_TACKNOWLEDGE( _val ) ( ( _val ) << 0 )
+  ( ( ( _reg ) & IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK ) >> IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT )
+#define IRQAMP_ITSTMPAC_TACKNOWLEDGE( _val ) \\
+  ( ( _val ) << IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT )
 
 /** @} */
 
@@ -382,8 +387,9 @@ typedef struct irqamp_timestamp {
 #define IRQAMP_ILEVEL_IL_15_1_SHIFT 1
 #define IRQAMP_ILEVEL_IL_15_1_MASK 0xfffeU
 #define IRQAMP_ILEVEL_IL_15_1_GET( _reg ) \\
-  ( ( ( _reg ) >> 1 ) & 0x7fffU )
-#define IRQAMP_ILEVEL_IL_15_1( _val ) ( ( _val ) << 1 )
+  ( ( ( _reg ) & IRQAMP_ILEVEL_IL_15_1_MASK ) >> IRQAMP_ILEVEL_IL_15_1_SHIFT )
+#define IRQAMP_ILEVEL_IL_15_1( _val ) \\
+  ( ( _val ) << IRQAMP_ILEVEL_IL_15_1_SHIFT )
 
 /** @} */
 



More information about the vc mailing list