8.9.7 builtin_avr_insert_bits Built-in Function
Inserts bits into val
in a manner dictated by a mapping value and
returns the resulting value.
Prototype
uint8_t __builtin_avr_insert_bits (uint32_t map, uint8_t bits, uint8_t val)
Remarks
Insert bits from bits
into val
in a manner dictated by
map
, and return the resulting value.
Each of the 8 nibbles (4 bits) of map
controls a bit in the returned
value whose bit position is the same as the nibble's nibble position in
map
. For example, the most-significant nibble of
map
controls insertion into the most-significant bit of the
returned value, etc. If a nibble in map
is 0xF, then the corresponding
bit in the returned value is the corresponding bit of val
, unmodified.
Nibbles with a value of 0 through 7 indicate that the corresponding bit in the returned
value is obtained from the bit with bit position within bits
.
Example
#include <stdint.h>
#include <stdio.h>
int main(void) {
uint8_t result, myValue, myBits;
volatile char dummy;
myValue = 0xF6;
myBits = 0x3A;
result = __builtin_avr_insert_bits(0x01234567, myBits, myValue);
printf("result is 0x%X\n", result);
result = __builtin_avr_insert_bits(0x5566FFFF, myBits, myValue);
printf("result is 0x%X\n", result);
}
Example Output
result is 0x5C
result is 0xC6
Example Explanation
In the first usage of the built-in in the above example, the first nibble in the
map
value (0x0) indicates that the most-significant bit of the
result will be derived from bit #0 in myBits
. The next
lower-significant bit will be derived from bit #1, etc. Given the map nibbles in the
above example, the first execution of the built-in will return a value being that of
myBits
with its bits appearing in reverse order.
In the second usage of the built-in, the lower four nibble of map
are
0xF, which implies that the lower four bits of the result value will be the lower four
bits of myValue
, unmodified. The two most-significant nibbles of
map
are 0x5, indicating that the two most-significant bits of the
returned value will be bit #5 of myBits
(which is 1). Similarly, the
next two bits of the result will be bit #6 of myBits
(which is 0).