From 796b2691146a3a4eaace4fa155d3c0c2f7379832 Mon Sep 17 00:00:00 2001 From: bd Date: Wed, 16 Apr 2025 23:35:59 -0400 Subject: Fix a bug related to parsing immediates in decode --- inc/pipe_spec.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'inc/pipe_spec.h') diff --git a/inc/pipe_spec.h b/inc/pipe_spec.h index 772314e..d211b72 100644 --- a/inc/pipe_spec.h +++ b/inc/pipe_spec.h @@ -65,4 +65,21 @@ */ #define GET_MID_BITS(k, m, n) GET_LS_BITS((k) >> (m), ((n) - (m))) +/** + * Return the bits from integer K starting at N and ending at M using a bit + * mask, but sign-extends the result. This is required to parse immediates. + * @param the integer to be parsed + * @param the index of the starting bit to be parsed + * @param the index of the ending bit to be parsed + * @return a section of bits from K + */ +// clang-format off +#define GET_BITS_SIGN_EXTEND(k, m, n) \ + ({\ + int _f = GET_MID_BITS(k, m, n); \ + int _w = (n) - (m) - (1); \ + _f = (_f & (1 << (_w - 1))) ? (_f | (-1 << _w)) : _f; \ + }) +// clang-format on + #endif /* DEFINITIONS_H_INCLUDED */ -- cgit v1.2.3