xori
lyszt.net охватывает xori и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
xori выполняет побитовое XOR с константой. Вместе с andi и ori она дополняет логические инструкции с непосредственным операндом. Буква i означает immediate (непосредственный): фиксированное значение, закодированное в инструкции, поэтому второй регистр не нужен. XOR даёт 1 в позиции бита, когда два бита различаются (см. страницу xor). При заданной константной маске 1 в маске инвертирует соответствующий бит, а 0 оставляет этот бит без изменений.
Синтаксис xori приведён ниже. Она выполняет XOR значения в rs1 с константой imm и записывает результат в rd.
xori rd, rs1, imm
andi очищает выбранные биты, ori устанавливает их, а xori инвертирует их. Двойная инверсия возвращает исходное значение.
xori также предоставляет инструкцию not. Инвертирование всех битов значения означает XOR с маской из всех 1, а not — это сокращение для строки ниже, потому что -1 в битах — это все 1. В RISC-V нет выделенной инструкции, которая инвертирует каждый бит.
xori rd, rs, -1
Руководство RISC-V утверждает, что 12-битный непосредственный операнд расширяется со знаком до 32 бит перед операцией, поэтому константа -1 становится маской из всех 1. Оно указывает xori с константой -1 как побитовую логическую инверсию регистра, то есть псевдоинструкцию not.
Обычное небольшое применение переключает значение да или нет, хранимое как 0 или 1. Следующая строка переключает его в другое состояние при каждом выполнении.
xori t0, t0, 1
Константа ограничена 12 битами. Для более широких шаблонов загрузите маску в регистр и используйте xor.
Пример
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
