Переполнение перемещения при выполнении побитового И (сборка SPARC)? - PullRequest
2 голосов
/ 15 октября 2010

Я пытаюсь выполнить побитовое И в регистре, в качестве битовой маски для удаления старшего значащего бита (который считается битом 16 при отсчете от 0). Однако, когда я пытаюсь скомпилировать мой код с помощью gcc, он выдает мне следующие сообщения об ошибках:

Сообщения ассемблера: 19: Ошибка: переполнение при перемещении

Я предполагаю, что это как-то связано с размером применяемой битовой маски, потому что при выполнении операции AND с двумя регистрами, содержащими небольшие числа, я не сталкиваюсь с одной и той же ошибкой. Сам код выглядит так:

.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

Если бы кто-нибудь мог предложить некоторое представление о том, как решить эту проблему, это было бы очень ценно.

Спасибо,

badPanda

1 Ответ

2 голосов
/ 15 октября 2010

Самый старший бит - это бит 15 (в 16-битном целом, когда биты начинаются с нуля).

...