Переполнение переполнения при выполнении побитовых и (сборка SPARC)?
-
08-10-2019 - |
Вопрос
Я пытаюсь выполнить побитовую и в реестре, как ратушную маску, чтобы удалить самый значительный бит (который бывает немного 16 при подсчете от 0). Однако, когда я пытаюсь скомпилировать свой код, используя GCC, это дает мне следующие сообщения об ошибках:
Сообщения ассемблера: 19: Ошибка: переполнение переселения
Я предполагаю, что это что-то связано с размером битовой маски, которую я подаю заявку, потому что когда я выполняю и с двумя регистрами, содержащими небольшие числа, я не сталкиваюсь с той же ошибкой. Сам код выглядит,
.global main
main:
save %sp, -96, %sp
clr %l1
clr %l2
set 0xffff, %l0
set 0xaaaa8c01, %l4
set 0xff001234, %l5
set 0x13579bdf, %l6
set 0xc8b4ae32, %l7
srl %l4, 31, %l1
srl %l0, 15, %l2
xor %l1, %l2, %l1
and %l1, 0x1, %l1
sll %l0, 1, %l0
add %l0, %l1, %l0
and %l0, 0xffff, %l0
mov 1, %g1
ta 0
Если кто-то может предложить некоторое понимание того, как решить эту проблему, это было бы очень ценится.
Спасибо,
бадпанда
Решение
Наиболее значимым битом немного 15 (в 16-битном целом, когда биты на основе нуля).