Переполнение переполнения при выполнении побитовых и (сборка SPARC)?

StackOverflow https://stackoverflow.com/questions/3944791

Вопрос

Я пытаюсь выполнить побитовую и в реестре, как ратушную маску, чтобы удалить самый значительный бит (который бывает немного 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-битном целом, когда биты на основе нуля).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top