2011/11/28 Georg-Johann Lay <a...@gjlay.de>:
> 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.
>
>

Approved.

Denis.

Reply via email to