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)
