Microchip Technology SW006023-2 Data Sheet
MPLAB
®
XC32 C/C++ Compiler User’s Guide
DS51686E-page 162
2012 Microchip Technology Inc.
Constraint letters and modifiers supported by the compiler are listed in Table 14-1
through Table 14-4.
through Table 14-4.
TABLE 14-1:
REGISTER CONSTRAINT LETTERS SUPPORTED BY THE
COMPILER
COMPILER
TABLE 14-2:
INTEGER CONSTRAINT LETTERS SUPPORTED BY THE
COMPILER
COMPILER
TABLE 14-3:
GENERAL CONSTRAINT LETTERS SUPPORTED BY THE
COMPILER
COMPILER
TABLE 14-4:
CONSTRAINT MODIFIERS SUPPORTED BY THE COMPILER
Examples:
Letter
Constraint
c
A register suitable for use in an indirect jump
d
An address register. This is equivalent to
@code{r}
unless generating MIPS16
code
ka
Registers that can be used as the target of multiply-accumulate instructions
l
The
@code{lo}
register. Use this register to store values that are no bigger
than a word
x
The concatenated
@code{hi}
and
@code{lo}
registers. Use this register to
store double-word values
Letter
Constraint
I
A signed 32-bit constant (for arithmetic instructions)
J
Integer zero
K
An unsigned 32-bit constant (for logic instructions)
L
A signed 32-bit constant in which the lower 32 bits are zero. Such constants can
be loaded using
be loaded using
@code{lui}
M
A constant that cannot be loaded using
@code{lui}
,
@code{addiu}
or
@code{ori}
N
A constant in the range -65535 to -1 (inclusive)
O
A signed 15-bit constant
P
A constant in the range 1 to 65535 (inclusive)
Letter
Constraint
R
An address that can be used in a non-macro load or store.
Letter
Constraint
=
Means that this operand is write-only for this instruction: the previous value is
discarded and replaced by output data
discarded and replaced by output data
+
Means that this operand is both read and written by the instruction
&
Means that this operand is an
earlyclobber
operand, which is modified
before the instruction is finished using the input operands. Therefore, this
operand may not lie in a register that is used as an input operand or as part of
any memory address
operand may not lie in a register that is used as an input operand or as part of
any memory address
d
Second register for operand number n, i.e.,
%d
n
..
q
Fourth register for operand number n, i.e.,
%q
n
..
t
Third register for operand number n, i.e.,
%t
n
..