AN 978: Nios® V Processor Migration Guidelines

ID 773196
Date 1/27/2025
Public
Document Table of Contents

7.1. Arithmetic and Logic Operations

Table 39.  Assembly Language Comparison (Arithmetic and Logic Operations)
Nios® II Processor Nios® V Processor
Operation Assembler Syntax Operation Assembler Syntax
rC ← rA + rB add rC, rA, rB xC ← xA + xB add xC, xA, xB
rB ← rA + σ(IMM16) addi rB, rA, IMM16 xB ← xA + σ(IMM12) addi xB, xA, IMM12
rC ← rA & rB and rC, rA, rB xC ← xA & xB and xC, xA, xB
rB ← rA & (IMM16 : 0x0000) andhi rB, rA, IMM16 xB ← xA & (IMM20 : 0x000)

lui xB, IMM20

and xB, xA, xB

rB ← rA & (0x0000 : IMM16) andi rB, rA, IMM16 xB ← xA & σ(IMM12) andi xB, xA, IMM12
rB ← rA & (0x0000 : IMM16) andi rB, rA, IMM16 xB ← xA & (0x0000 : IMM16)

li xB, IMM16

and xB, xA, xB

if (rA == rB)

then rC ← 1

else rC ← 0

cmpeq rC, rA,rB

if (xA - xB == 0)

then xC ← 1

else xC ← 0

sub xB, xA, xB

seqz xC, xB

if (rA == σ(IMM16))

then rB ← 1

else rB ← 0

cmpeqi rB, rA,IMM16

if (xA - ±IMM15 == 0)

then xB ← 1

else xB ← 0

li xB, ±IMM15

sub xB, xA, xB

seqz xB,xB

if ((signed) rA >= (signed) rB)

then rC ← 1

else rC ← 0

cmpge rC, rA, rB

if ((signed) xA < (signed) xB)

then xC ← 0

else xC ← 1

slt xC, xA, xB

not xC, xC

andi xC, xC, 1

if ((signed) rA >= (signed) σ(IMM16))

then rB ← 1

else rB ← 0

cmpgei rB, rA, IMM16

if ((signed) xA < (signed) σ(IMM12))

then xB ← 0

else xB ← 1

slti xB, xA, IMM12

not xB, xB

andi xB, xB, 1

if ((unsigned) rA >= (unsigned) rB)

then rC ← 1

else rC ← 0

cmpgeu rC, rA, rB

if ((unsigned) xA < (unsigned) xB)

then xC ← 0

else xC ← 1

sltu xC, xA, xB

not xC, xC

andi xC, xC, 1

if ((unsigned) rA >= (unsigned) (0x0000 : IMM16))

then rB ← 1

else rB ← 0

cmpgeui rB, rA, IMM16

if ((unsigned) xA < (unsigned) (0x00000 : IMM12))

then xB ← 0

else xB ← 1

sltiu xB, xA, IMM12

not xB, xB

andi xB, xB, 1

if ((signed) rA > (signed) rB)

then rC ← 1

else rC ← 0

cmpgt rC, rA, rB

if ((signed) xA > (signed) xB)

then xC ← 1

else xC ← 0

slt xC, xB. xA

if ((signed) rA > (signed) σ(IMM16))

then rB ← 1

else rB ← 0

cmpgti rB, rA, IMM16

if ((signed) xA > (signed) IMM15)

then xB ← 1

else xB ← 0

li xB, ±IMM15

slt xB, xB. xA

if ((unsigned) rA > (unsigned) rB)

then rC ← 1

else rC ← 0

cmpgtu rC, rA, rB

if ((unsigned) xA > (unsigned) xB)

then xC ← 1

else xC ← 0

sltu xC, xB, xA

if ((unsigned) rA > (unsigned) (0x0000 : IMM16))

then rB ← 1

else rB ← 0

cmpgtui rB, rA, IMM16

if ((unsigned) xA > (unsigned) (0x0000 : IMM16))

then xB ← 1

else xB ← 0

li xB, IMM16

sltu xB, xB, xA

if ((signed) rA <= (signed) rB)

then rC ← 1

else rC ← 0

cmple rC, rA, rB

if ((signed) xA > (signed) xB)

then xC ← 0

else xC ← 1

slt xC, xB, xA

not xC, xC

andi xC, xC, 1

if ((signed) rA <= (signed) σ(IMM16))

then rB ← 1

else rB ← 0

cmplei rB, rA, IMM16

if ((signed) xA < (signed) σ(IMM12+1))

then xB ← 1

else xB ← 0

slti xB, xA, IMM12+1

if ((unsigned) rA <= (unsigned) rB)

then rC ← 1

else rC ← 0

cmpleu rC, rA, rB

if ((unsigned) xB < (unsigned) xA)

then xC ← 0

else xC ← 1

sltu xC, xB, xA

not xC, xC

andi xC, xC, 1

if ((unsigned) rA <= (unsigned) (0x0000 : IMM16))

then rB ← 1

else rB ← 0

cmpleui rB, rA, IMM16

if ((unsigned) xA < (unsigned) (0x00000 : IMM12+1))

then xB ← 1

else xB ← 0

sltiu xB, xA, IMM12+1

if ((signed) rA < (signed) rB)

then rC ← 1

else rC ← 0

cmplt rC, rA, rB

if ((signed) xA < (signed) xB)

then xC ← 1

else xC ← 0

slt xC, xA, xB

if ((signed) rA < (signed) σ(IMM16))

then rB ← 1

else rB ← 0

cmplti rB, rA, IMM16

if ((signed) xA < (signed) σ(IMM12))

then xC ← 1

else xC ← 0

slti xC, xA, IMM12

if ((unsigned) rA < (unsigned) rB)

then rC ← 1

else rC ← 0

cmpltu rC, rA, rB

if ((unsigned) xA < (unsigned) xB)

then xC ← 1

else xC ← 0

sltu xC, xA, xB

if ((unsigned) rA < (unsigned) (0x0000 : IMM16))

then rB ← 1

else rB ← 0

cmpltui rB, rA, IMM16

if ((unsigned) xA < (unsigned) (0x00000 : IMM12))

then xC ← 1

else xC ← 0

sltiu xC, xA, IMM12

if (rA != rB)

then rC ← 1

else rC ← 0

cmpne rC, rA, rB

If (xA – xB != 0)

then xC ← 1

else xC ← 0

sub xC, xA, xB

snez xC, xC

if (rA != σ(IMM16))

then rB ← 1

else rB ← 0

cmpnei rB, rA, IMM16

If (xA – (signed)IMM15 != 0)

then xC ← 1

else xC ← 0

li xB, ±IMM15

sub xC, xA, xB

snez xC, xC

rC ← (signed) rA ÷ (signed) rB div rC, rA, rB xC ← (signed) xA ÷ (signed) xB div xC, xA, xB
rC ← (unsigned) rA ÷ (unsigned) rB divu rC, rA, rB xC ← (unsigned) xA ÷ (unsigned) xB divu xC, xA, xB
rC ← (rA x rB)31..0 mul rC, rA, rB xC ← (xA x xB) 31..0 mul xC, xA, xB
rB ← (rA x σ(IMM16))31..0 muli rB, rA, IMM16

xB ←σ(IMM12)

xC ← (xA x xB) 31..0

addi xB, x0, IMM12

mul xB, xA, xB

rC ← ((signed) rA) x ((signed) rB))63..32 mulxss rC, rA, rB xC ← ((signed) xA) x ((signed) xB)) 63..32 mulh xC, xA, xB
rC ← ((signed) rA) x ((unsigned) rB))63..32 mulxsu rC, rA, rB xC ← ((signed) xA) x ((unsigned) xB)) 63..32 mulhsu xC, xA, xB
rC ← ((unsigned) rA) x ((unsigned) rB))63..32 mulxuu rC, rA, rB xC ← ((unsigned) xA) x ((unsigned) xB)) 63..32 mulhu xC, xA, xB
rC ← ~(rA | rB) nor rC, rA, rB

xC ← xA | xB

xC ← ~xC

or xC, xA, xB

not xC, xC

rC ← rA | rB or rC, rA, rB xC ← xA | xB or xC, xA, xB
rB ← rA | (IMM16 : 0x0000) orhi rB, rA, IMM16 xB ← xA | (IMM20 : 0x000)

lui xC, IMM20

or xB, xA, xC

rB ← rA | (0x0000 : IMM16) ori rB, rA, IMM16 xB ← xA | σ(IMM12) ori xB, xA, IMM12
rB ← rA | (0x0000 : IMM16) ori rB, rA, IMM16

xC ← (0x0000 : IMM16)

xB ← xA | xC

li xC, IMM16

or xB, xA, xC

rC ← rA rotated left rB4..0 bit positions rol rC, rA, rB Not available in Nios® V processor -
rC ← rA rotated left IMM5 bit positions roli rC, rA, IMM5 Not available in Nios® V processor -
rC ← rA rotated right rB4..0 bit positions ror rC, rA, rB Not available in Nios® V processor -
rC ← rA << (rB4..0) sll rC, rA, rB xC ← xA << (xB4..0) sll xC, xA, xB
rC ← rA << IMM5 slli rC, rA, IMM5 xC ← xA << IMM5 slli xC, xA, IMM5
rC ← (signed) rA >> ((unsigned) rB4..0) sra rC, rA, rB xC ← (signed) xA >> ((unsigned) xB4..0) sra xC, xA, xB
rC ← (signed) rA >> ((unsigned) IMM5) srai rC, rA, IMM5 xC ← (signed) xA >> ((unsigned) IMM5) srai xC, xA, IMM5
rC ← (unsigned) rA >> ((unsigned) rB4..0) srl rC, rA, rB xC ← (unsigned) xA >> ((unsigned) xB4..0) srl xC, xA, xB
rC ← (unsigned) rA >> ((unsigned) IMM5) srli rC, rA, IMM5 xC ← (unsigned) xA >> ((unsigned) IMM5) srli xC, xA, IMM5
rC ← rA – rB sub rC, rA, rB xC ← xA - xB sub xC, xA, xB
rB ← rA –σ(IMMED) subi rB, rA, IMMED xC ← xA - σ(IMM12) addi xC, xA, -IMM12
rC ← rA ^ rB xor rC, rA, rB xC ← xA ^ xB xor xC, xA, xB
rB ← rA ^ (IMM16 : 0x0000) xorhi rB, rA, IMM16 xB ← xA ^ (IMM20 : 0x000)

lui xC, IMM20

xor xB, xA, xC

rB ← rA ^ (0x0000 : IMM16) xori rB, rA, IMM16 xB ← xA ^ σ(IMM12) xori xC, xA, IMM12
rB ← rA ^ (0x0000 : IMM16) xori rB, rA, IMM16

xC ← IMM16

xB ← xA ^ xC

li xC, IMM16

xor xB, xA, xC