Nios II Classic Processor Reference Guide

ID 683620
Date 10/28/2016
Public
Document Table of Contents

8.5.2. addi

Instruction addi
Operation

rB ←  rA + σ(IMM16)

Assembler Syntax

addi rB, rA, IMM16

Example

addi r6, r7, -100

Description

Sign-extends the 16-bit immediate value and adds it to the value of rA. Stores the sum in rB.

Usage

Carry Detection (unsigned operands):

Following an addi operation, a carry out of the MSB can be detected by checking whether the unsigned sum is less than one of the unsigned operands. The carry bit can be written to a register, or a conditional branch can be taken based on the carry condition. The following code shows both cases:

addi rB, rA, IMM16

cmpltu rD, rB, rA

addi rB, rA, IMM16

bltu rB, rA, label

# The original add operation

# rD is written with the carry bit

# The original add operation

# Branch if carry generated

Overflow Detection (signed operands):

An overflow is detected when two positives are added and the sum is negative, or when two negatives are added and the sum is positive. The overflow condition can control a conditional branch, as shown in the following code:

addi rB, rA, IMM16

xor rC, rB, rA

xorhi rD, rB, IMM16

and rC, rC, rD

blt rC, r0,label

# The original add operation

# Compare signs of sum and rA

# Compare signs of sum and IMM16

# Combine comparisons

# Branch if overflow occurred

Exceptions

None

Instruction Type

I

Instruction Fields

A = Register index of operand rA

B = Register index of operand rB

IMM16 = 16-bit signed immediate value

Bit Fields
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
A B IMM16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IMM16 0x04