diff options
author | David Mosberger <davidm@hpl.hp.com> | 2004-12-08 00:20:49 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-12-07 16:20:49 -0800 |
commit | 1b79dc38ddc47991e1b111a238162c9f1a5282a8 (patch) | |
tree | f116e6f00b72cbdef1fdada4d3db3fcb1b8aad60 | |
parent | 9492747a48ed3a59798781f8aaacb446f1bace5e (diff) | |
download | gcc-1b79dc38ddc47991e1b111a238162c9f1a5282a8.zip gcc-1b79dc38ddc47991e1b111a238162c9f1a5282a8.tar.gz gcc-1b79dc38ddc47991e1b111a238162c9f1a5282a8.tar.bz2 |
re PR target/18443 (#pragma pack(1) breaks function pointer initialization)
PR target/18443
* config/ia64/ia64.c (ia64_assemble_integer): Add support for
emitting unaligned pointer-sized integers.
From-SVN: r91842
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 70747e2..c560ba1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-12-07 David Mosberger <davidm@hpl.hp.com> + + PR target/18443 + * config/ia64/ia64.c (ia64_assemble_integer): Add support for + emitting unaligned pointer-sized integers. + 2004-12-07 Steven Bosscher <stevenb@suse.de> PR c/18867 diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index a8fdec4..1c80ed1 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -2736,15 +2736,16 @@ static bool ia64_assemble_integer (rtx x, unsigned int size, int aligned_p) { if (size == POINTER_SIZE / BITS_PER_UNIT - && aligned_p && !(TARGET_NO_PIC || TARGET_AUTO_PIC) && GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x)) { - if (POINTER_SIZE == 32) - fputs ("\tdata4\t@fptr(", asm_out_file); - else - fputs ("\tdata8\t@fptr(", asm_out_file); + static const char * const directive[2][2] = { + /* 64-bit pointer */ /* 32-bit pointer */ + { "\tdata8.ua\t@fptr(", "\tdata4.ua\t@fptr("}, /* unaligned */ + { "\tdata8\t@fptr(", "\tdata4\t@fptr("} /* aligned */ + }; + fputs (directive[(aligned_p != 0)][POINTER_SIZE == 32], asm_out_file); output_addr_const (asm_out_file, x); fputs (")\n", asm_out_file); return true; |