diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-03-15 08:39:35 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-03-15 08:47:37 +0100 |
commit | ea3eadfc56e29cba361615ca61c15e0796c6a846 (patch) | |
tree | 5c0b32266ad5b9acc17dc5b086cd98e632c0816f | |
parent | spec: Remove generic attrs from register blocks (diff) | |
download | rtems-central-ea3eadfc56e29cba361615ca61c15e0796c6a846.tar.bz2 |
interface: Improve register bit field macros
Update #4828.
-rw-r--r-- | rtemsspec/interface.py | 15 | ||||
-rw-r--r-- | 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 ) /** @} */ |