00000234: xori r16,r16,32768
00000238: addi r16,r16,-32768
Это классическое расширение знакового бита, в данном случае для 16-битного числа: если бит 15 был установлен (число отрицательное), то после xor он будет сброшен (т.е. он и все биты старше него станут нулями), а после addi бит 15 и все старше него станут единицами. Если бит 15 был сброшен (число неотрицательное), то после xor он будет установлен, а после addi -- сброшен опять.
Подскажите пожалуйста смысл таких преобразований?
Знаковое расширение -- это часть
short right = acum & 65535;
. Оно нужно для того, чтобы работать с загруженными в регистры значениями не задумываясь об исходной ширине их типа данных. Т.е.
(short)-1
в 64-битном регистре будет представлен как 0xffffffffffffffff, а не как 0xffff.