summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-03-15 08:39:35 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-03-15 08:47:37 +0100
commitea3eadfc56e29cba361615ca61c15e0796c6a846 (patch)
tree5c0b32266ad5b9acc17dc5b086cd98e632c0816f
parentspec: Remove generic attrs from register blocks (diff)
downloadrtems-central-ea3eadfc56e29cba361615ca61c15e0796c6a846.tar.bz2
interface: Improve register bit field macros
Update #4828.
-rw-r--r--rtemsspec/interface.py15
-rw-r--r--rtemsspec/tests/test_interface.py30
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 )
/** @} */