aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2012-05-14 15:47:52 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2012-05-14 15:47:52 +0000
commit5bb53d1a1dc6cfa55cbca53cf72a8bdf017da834 (patch)
treedba3368294d8e75054d91571daa64b9c209138fb /gcc
parent6ba840107af2f446cc76dcfc1496eb1932c6351d (diff)
downloadgcc-5bb53d1a1dc6cfa55cbca53cf72a8bdf017da834.zip
gcc-5bb53d1a1dc6cfa55cbca53cf72a8bdf017da834.tar.gz
gcc-5bb53d1a1dc6cfa55cbca53cf72a8bdf017da834.tar.bz2
re PR target/53344 (Dont' emit an assembler warning when assembling 3-byte symbols)
PR target/53344 * config/avr/avr.c (avr_const_address_lo16): Remove. (avr_assemble_integer): Print ".byte lo8(x)", ".byte hi8(x)", ".byte hh8(x)" instead of emit an assembler .warning if 3-byte address is assembled. * doc/extend.texi (AVR Named Address Spaces): Document that binutils 2.23 is needed to assemble 3-byte addresses. From-SVN: r187470
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/avr/avr.c60
-rw-r--r--gcc/doc/extend.texi17
3 files changed, 29 insertions, 58 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 647fcf4..840dd22 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2012-05-14 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/53344
+ * config/avr/avr.c (avr_const_address_lo16): Remove.
+ (avr_assemble_integer): Print ".byte lo8(x)",
+ ".byte hi8(x)", ".byte hh8(x)" instead of emit an assembler
+ .warning if 3-byte address is assembled.
+ * doc/extend.texi (AVR Named Address Spaces): Document that
+ binutils 2.23 is needed to assemble 3-byte addresses.
+
2012-05-14 Richard Guenther <rguenther@suse.de>
* tree-vect-data-refs.c (vect_setup_realignment): Remove
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 5b28096..38afc7a 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -6639,48 +6639,6 @@ _reg_unused_after (rtx insn, rtx reg)
}
-/* Return RTX that represents the lower 16 bits of a constant address.
- Unfortunately, simplify_gen_subreg does not handle this case. */
-
-static rtx
-avr_const_address_lo16 (rtx x)
-{
- rtx lo16;
-
- switch (GET_CODE (x))
- {
- default:
- break;
-
- case CONST:
- if (PLUS == GET_CODE (XEXP (x, 0))
- && SYMBOL_REF == GET_CODE (XEXP (XEXP (x, 0), 0))
- && CONST_INT_P (XEXP (XEXP (x, 0), 1)))
- {
- HOST_WIDE_INT offset = INTVAL (XEXP (XEXP (x, 0), 1));
- const char *name = XSTR (XEXP (XEXP (x, 0), 0), 0);
-
- lo16 = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
- lo16 = gen_rtx_CONST (Pmode, plus_constant (Pmode, lo16, offset));
-
- return lo16;
- }
-
- break;
-
- case SYMBOL_REF:
- {
- const char *name = XSTR (x, 0);
-
- return gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
- }
- }
-
- avr_edump ("\n%?: %r\n", x);
- gcc_unreachable();
-}
-
-
/* Target hook for assembling integer objects. The AVR version needs
special handling for references to certain labels. */
@@ -6688,7 +6646,7 @@ static bool
avr_assemble_integer (rtx x, unsigned int size, int aligned_p)
{
if (size == POINTER_SIZE / BITS_PER_UNIT && aligned_p
- && text_segment_operand (x, VOIDmode) )
+ && text_segment_operand (x, VOIDmode))
{
fputs ("\t.word\tgs(", asm_out_file);
output_addr_const (asm_out_file, x);
@@ -6698,17 +6656,19 @@ avr_assemble_integer (rtx x, unsigned int size, int aligned_p)
}
else if (GET_MODE (x) == PSImode)
{
- default_assemble_integer (avr_const_address_lo16 (x),
- GET_MODE_SIZE (HImode), aligned_p);
+ /* This needs binutils 2.23+, see PR binutils/13503 */
+
+ fputs ("\t.byte\tlo8(", asm_out_file);
+ output_addr_const (asm_out_file, x);
+ fputs (")" ASM_COMMENT_START "need binutils PR13503\n", asm_out_file);
- fputs ("\t.warning\t\"assembling 24-bit address needs binutils"
- " extension for hh8(", asm_out_file);
+ fputs ("\t.byte\thi8(", asm_out_file);
output_addr_const (asm_out_file, x);
- fputs (")\"\n", asm_out_file);
+ fputs (")" ASM_COMMENT_START "need binutils PR13503\n", asm_out_file);
- fputs ("\t.byte\t0\t" ASM_COMMENT_START " hh8(", asm_out_file);
+ fputs ("\t.byte\thh8(", asm_out_file);
output_addr_const (asm_out_file, x);
- fputs (")\n", asm_out_file);
+ fputs (")" ASM_COMMENT_START "need binutils PR13503\n", asm_out_file);
return true;
}
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 6aaf453..d9efab9 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -1273,6 +1273,7 @@ If the high bit of the address is set, data is read from
RAM using the lower two bytes as RAM address.
If the high bit of the address is clear, data is read from flash
with @code{RAMPZ} set according to the high byte of the address.
+@xref{AVR Built-in Functions,,@code{__builtin_avr_flash_segment}}.
Objects in this address space will be located in @code{.progmem.data}.
@end table
@@ -1302,6 +1303,7 @@ int main (void)
@}
@end example
+@noindent
For each named address space supported by avr-gcc there is an equally
named but uppercase built-in macro defined.
The purpose is to facilitate testing if respective address space
@@ -1327,7 +1329,8 @@ int read_var (void)
#endif /* __FLASH */
@end example
-Notice that attribute @ref{AVR Variable Attributes,@code{progmem}}
+@noindent
+Notice that attribute @ref{AVR Variable Attributes,,@code{progmem}}
locates data in flash but
accesses to these data will read from generic address space, i.e.@:
from RAM,
@@ -1335,6 +1338,7 @@ so that you need special accessors like @code{pgm_read_byte}
from @w{@uref{http://nongnu.org/avr-libc/user-manual,AVR-LibC}}
together with attribute @code{progmem}.
+@noindent
@b{Limitations and caveats}
@itemize
@@ -1361,17 +1365,14 @@ must not optimize away known values or insert them
as immediates into operands of instructions.
@item
-Code like the following is not yet supported because of missing
-support in avr-binutils,
-see @w{@uref{http://sourceware.org/PR13503,PR13503}}.
+The following code initializes a variable @code{pfoo}
+located in static storage with a 24-bit address:
@example
extern const __memx char foo;
const __memx void *pfoo = &foo;
@end example
-The code will throw an assembler warning and the high byte of
-@code{pfoo} will be initialized with@tie{}@code{0}, i.e.@: the
-initialization will be as if @code{foo} was located in the first
-64@tie{}KiB chunk of flash.
+Such code requires at least binutils 2.23, see
+@w{@uref{http://sourceware.org/PR13503,PR13503}}.
@end itemize