AVR-GCC for Linux doesn't handle well 16 bit words

Not necessarily. Arithmetic shift could be selected with signed types, because it makes sense only there. The user then can switch between shr and asr by casting the operand. But such simple handling might break legacy code, so bad design decisions have to be preserved and detailed further forever :frowning: