diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2019-08-22 12:12:21 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-08-22 12:22:51 -0400 |
commit | 84fd89b8cfb1c4f4bedd94d8f50ab402f878267a (patch) | |
tree | 39b224f69c8676a7e2c369663be4a29b8d432afc /src/ctr.h | |
parent | 1b83fb72f5602ab0b050e2df14ed37a2463b53b7 (diff) | |
download | kutter-84fd89b8cfb1c4f4bedd94d8f50ab402f878267a.tar.gz kutter-84fd89b8cfb1c4f4bedd94d8f50ab402f878267a.tar.xz kutter-84fd89b8cfb1c4f4bedd94d8f50ab402f878267a.zip |
ctr: Add support for multiple integers in DECL_CTR_INT
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/ctr.h')
-rw-r--r-- | src/ctr.h | 30 |
1 files changed, 17 insertions, 13 deletions
@@ -14,20 +14,24 @@ static char __PASTE(_DECLS_, __LINE__)[] __attribute__((used)) \ __section(".compile_time_request") = (REQUEST) -// Helper macros for encoding an integer -#define CTR_HEX(H) ((H) > 9 ? (H) - 10 + 'A' : (H) + '0') -#define CTR_INT(V, S) CTR_HEX(((uint32_t)(V) >> (S)) & 0x0f) +// Macro to encode an integer for use with DECL_CTR_INT() +#define _CTR_HEX(H) ((H) > 9 ? (H) - 10 + 'A' : (H) + '0') +#define _CTR_INT(V, S) _CTR_HEX(((uint32_t)(V) >> (S)) & 0x0f) +#define CTR_INT(VALUE) { \ + ' ', (VALUE) < 0 ? '-' : '+', '0', 'x', \ + _CTR_INT((VALUE),28), _CTR_INT((VALUE),24), \ + _CTR_INT((VALUE),20), _CTR_INT((VALUE),16), \ + _CTR_INT((VALUE),12), _CTR_INT((VALUE),8), \ + _CTR_INT((VALUE),4), _CTR_INT((VALUE),0) } // Declare a compile time request with an integer expression -#define DECL_CTR_INT(REQUEST, VALUE) \ - static struct { char _r[sizeof(REQUEST)]; char _v[12]; } \ - __PASTE(_DECLI_, __LINE__) __attribute__((used)) \ - __section(".compile_time_request") = { \ - REQUEST " ", { \ - (VALUE) < 0 ? '-' : '+', '0', 'x', \ - CTR_INT((VALUE),28), CTR_INT((VALUE),24), \ - CTR_INT((VALUE),20), CTR_INT((VALUE),16), \ - CTR_INT((VALUE),12), CTR_INT((VALUE),8), \ - CTR_INT((VALUE),4), CTR_INT((VALUE),0), 0 } } +#define DECL_CTR_INT(REQUEST, PARAM_COUNT, args...) \ + static struct { \ + char _request[sizeof(REQUEST)-1]; \ + char _values[(PARAM_COUNT)][12]; \ + char _end_of_line; \ + } __PASTE(_DECLI_, __LINE__) __attribute__((used)) \ + __section(".compile_time_request") = { \ + (REQUEST), { args }, 0 } #endif // ctr.h |