[Patch,AVR]: Add %T/%t to print_operand. Add built-in to permute bits.
Georg-Johann Lay
avr@gjlay.de
Mon Nov 28 05:15:00 GMT 2011
This adds two built-in functions that facilitate moving bits.
The two built-ins work the same way; there is a 16-bit version and a 8-bit version.
The first operand specifies a mapping to apply to the second operand:
The n-th nibble of the mapping specifies the image of the n-th bit.
Typical use case for these built-ins is adjusting input and output values to
non-contiguous port layouts.
The patch also introduces new %-codes to help printing operands for BLD and BST
which is useful in other places, too.
For example
char reverse (char x)
{
return __builtin_avr_map8 (0x01234567, x);
}
leads to
reverse:
mov __tmp_reg__,r24
inc __zero_reg__
0: ror r0
rol r24
lsl __zero_reg__
brne 0b
ret
Ok for trunk?
Johann
* doc/extend.texi (AVR Built-in Functions): Add documentation for
__builtin_avr_map8 and __builtin_avr_map16.
* config/avr/avr.md: Document new %t and %T asm output codes.
(define_c_enum "unspec"): Add UNSPEC_MAP_BITS.
(adjust_len): Add map_bits.
(map_bitsqi, map_bitshi): New insns.
* config/avr/avr-protos.h (avr_out_map_bits): New.
* config/avr/avr.c (print_operand): Implement %t and %T.
(adjust_insn_length): Handle ADJUST_LEN_MAP_BITS.
(avr_double_int_push_digit): New function.
(avr_map, avr_revert_map, avr_swap_map, avr_id_map): New functions.
(avr_sig_map, avr_map_hamming_byte): New functions.
(avr_out_swap_bits, avr_out_revert_bits, avr_move_bits,
avr_out_map_bits): New functions.
(enum avr_builtin_id): Add AVR_BUILTIN_MAP8, AVR_BUILTIN_MAP16.
(avr_init_builtins): Populate __builtin_avr_map8, __builtin_avr_map16.
(bdesc_2arg): Add __builtin_avr_map8, __builtin_avr_map16 ...
(avr_expand_builtin): ...and expand them.
* config/avr/avr-c.c (avr_cpu_cpp_builtins): New built-in defines:
__BUILTIN_AVR_MAP8, __BUILTIN_AVR_MAP16.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: map-bits-basic.diff
Type: text/x-patch
Size: 19615 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20111128/9f896b26/attachment.bin>
More information about the Gcc-patches
mailing list