Special Characters
Comments are introduced by the ‘#’ character and extend to the
end of the current line. If the ‘#’ appears as the first
character of a line, the whole line is treated as a comment, but in
this case the line can also be a logical line number directive
(see Comments) or a preprocessor control command
(see Preprocessing).
Instruction Delimiting
a0= r3.h * r2.l, a1 = r3.l * r2.h ;
The second case occurs when a general instruction is combined with one or two memory references for joint issue. The latter portions are set off by a "||" token.
a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
Multiple instructions can occur on the same line. Each must be
terminated by a semicolon character.
Register Names
Register names are reserved and may not be used as program identifiers.
Some operations (such as "Move Register") require a register pair. Register pairs are always data registers and are denoted using a colon, eg., R3:2. The larger number must be written firsts. Note that the hardware only supports odd-even pairs, eg., R7:6, R5:4, R3:2, and R1:0.
Some instructions (such as –SP (Push Multiple)) require a group of adjacent registers. Adjacent registers are denoted in the syntax by the range enclosed in parentheses and separated by a colon, eg., (R7:3). Again, the larger number appears first.
Portions of a particular register may be individually specified. This
is written with a dot (".") following the register name and then a
letter denoting the desired portion. For 32-bit registers, ".H"
denotes the most significant ("High") portion. ".L" denotes the
least-significant portion. The subdivisions of the 40-bit registers
are described later.
Accumulators
one 40-bit register
one 32-bit register
two 16-bit registers
one 8-bit register
Data Registers
R7.L, r2.h, r4.L, R0.H
Pointer Registers
p2, p5, fp, sp
Stack Pointer SP
Frame Pointer FP
Loop Top
Loop Count
Loop Bottom
Index Registers
Modify Registers
Length Registers
Base Registers
Floating Point
Blackfin Opcodes