move
в следующем коде находится в Слот задержки ветвления
bnez t8, .Lsmall_csumcpy /* < 8 bytes to copy */
move t2, a1
Регистр t2
назначается до выполнения ветвления, поэтому t2
имеетправильное значение в .Lsmall_csumcpy:
.Инструкция move
в коде имеет отступ, чтобы показать читателю, что она находится в слоте задержки.
Обычно ассемблер заполняет слоты задержки с помощью NOP
s, но из-за директивы .set noreorder
Ассемблер собирает инструкции в этом коде в точном порядке, в котором они написаны.
Некоторые симуляторы MIPS, используемые в классах, по умолчанию не включают интервалы задержки ветвления, поэтому этот код может работать некорректно в таком симуляторе, еслиСлоты задержки включены.