6.10 #pragma, General Purpose
Syntax
#pragma warning range byte option
#pragma overlap option
#pragma error instruction
#pragma warning instruction
Description
- The assembler evaluates constant integer
expressions as 64-bit signed integers internally. When such expressions are used as
immediate operands, they must be truncated to the number of bits required by the
instructions. For most operands, an out-of-range value will cause an "operand out of
range" error message. However, the immediate byte operands for the
LDI
,CPI
,ORI
,ANDI
,SUBI
andSBCI
instructions (see also http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf) have several possible interpretations that are affected by this option.- option = integer The immediate operand is evaluated as an integer, and if its value is outside the range [-128 ... 255] a warning is given. The assembler doesn't know if the users intends an integer operand to be signed or unsigned, hence it allows any signed or unsigned value that fits into a byte.
- option = overflow (default)
The immediate operand is basically evaluated as an unsigned byte, and any sign
extension bits are ignored. This option is particularly suitable when dealing with
bit masks, when the integer interpretation would cause lots of warnings,
like
ldi r16, ~((1 << 7) | (1 << 3))
- option = none Disables all out-of-range warnings for byte operands. Not recommended.
- If different sections of code are mapped
to overlapping memory locations using the ORG directive, an error message is normally issued. This
options modifies that behavior as follows:
- option = ignore Ignores overlap conditions altogether; no errors, no warnings. Not recommended.
- option = warning Produce warnings when overlaps are detected.
- option = error Consider overlaps as error condition; this is the default and recommended setting.
- option = default Revert to
default handling -error or whatever is specified with the
-O
command line option.
-O
command-line option, and the effective setting, that only can be modified with this#pragma
. The two settings are equal upon assembler invocation. This#pragma
changes the effective setting from the line it is invoked until the line it is changed by another invocation of this#pragma
. Hence, this#pragma
covers source line ranges and not address ranges. See also: OVERLAP and NOOVERLAP. - Causes use of instructions that are unsupported on the specified device to cause an assembler error (default behavior).
- Causes use of instructions that are unsupported on the specified device to cause an assembler warning.