Program Structure

Operands and Completers

is required. Relocatable expressions are meaningful when the base register is %r0, or when the base register contains the left part of a 32-bit address as illustrated in the following example:

LDIL

L%glob,%r1

;set up %r1 for STW

STW

%r9,R%glob(%r1)

 

Immediate operands provide data for the machine language instruction directly from the bits of the instruction word itself. A few instructions that use immediate operands are shown below:

ADDIL

L%var,%dp

LDIL

L%print,%r1

ADDI

4,%r3,%r5

SUBI

0x1C0,%r14,%ret0

Completers are special flags that modify an instruction's behavior. They are written in the opcode field, separated from the instruction mnemonic by a comma. The most common type of completer is a condition test.

Many instructions can conditionally trap or nullify the following instruction, depending on the result of their normal operation. For example, notice the completers in the sequence below:

ADD,NSV

%r1,%r2,%r3

BL,N

handle_oflo,%r0

OR

%r3,%r4,%r5

The ,NSV in the ADD instruction nullifies the BL instruction if no overflow occurs in the addition operation, and execution proceeds with the OR instruction. If overflow does occur, the BL instruction is executed, but the ,N completer on the BL specifies that the OR instruction in its delay slot should not be executed.

Each class of machine instructions defines the set of completers that can be used.

These are described in the PA-RISC 1.1 Architecture and Instruction Set Reference Manual and in PA-RISC 2.0 Architecture.

36

Chapter 2