This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>> +#define
>> MAKE_1BASED_INSERT_EXTRACT_FUNCS(NAME,SHIFT,UPPER,BITS) \
>> +static unsigned \
>> +insert_nps_##NAME (unsigned insn ATTRIBUTE_UNUSED, \
>> + int value ATTRIBUTE_UNUSED, \
>> + const char **errmsg ATTRIBUTE_UNUSED) \
>> +{ \
>> + if (value < 0 || value > UPPER) \
>> + *errmsg = _("Value must be in the range 0 to " #UPPER); \
>> + if (value == UPPER) \
>> + value = 0; \
>> + return insn | (value << SHIFT); \
>> +} \
>> + \
>> +static int \
>> +extract_nps_##NAME (unsigned insn ATTRIBUTE_UNUSED, \
>> + bfd_boolean * invalid ATTRIBUTE_UNUSED) \
>> +{ \
>> + int value = (insn >> SHIFT) & ((1 << BITS) - 1); \
>> + if (value == 0) \
>> + value = UPPER; \
>> + return value; \
>> +}
>
> I am not sure if you need those two functions as the default behavior for insert and extract behaves similarly.
Many thanks for looking at this so quickly.
I think that these functions have slightly different behaviour from the
default case - I have used these for operands which encode e.g. the
values 1-8 in 3 bits, where the values 1-7 are represented in the usual
way, and the value 8 is encoded as 0. If I understand it correctly, the
default behaviour will encode the values 0 to 7 literally. Does my
understanding seem correct?
This has however drawn my attention to the fact that there is an error
in the insert function's check - the condition should have been
if (value < 1 || value > UPPER)
so I will provide a revised patch shortly.
Many thanks,
Graham.
Attachment:
signature.asc
Description: OpenPGP digital signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |