summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/20021018-1.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2002-10-21 20:27:14 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2002-10-21 20:27:14 +0000
commit29d8dd5cee1f9ebd56b4473a690fcc54ad986265 (patch)
tree8129dae3f635ecd64671bae7a5cc5fed11de0036 /gcc/testsuite/gcc.dg/20021018-1.c
parent1b3950b972f64464a2a32edccaf00d8d413d72bd (diff)
downloadgcc-29d8dd5cee1f9ebd56b4473a690fcc54ad986265.tar.gz
* config/i386/i386.c (x86_64_sign_extended_value): Add allow_rip
argument. In CM_SMALL_PIC model consider SYMBOL_REFs binding locally or from constant pool or LABEL_REFs as sign extended if allow_rip. Change all +-1GB limits to +-16MB. (x86_64_general_operand, x86_64_szext_general_operand, x86_64_nonmemory_operand, x86_64_movabs_operand, x86_64_szext_nonmemory_operand, x86_64_immediate_operand, legitimate_address_p, ix86_expand_int_movcc): Update callers. (local_symbolic_operand): Don't allow offsets bigger than +-16MB in CM_SMALL_PIC model. (legitimate_pic_address_disp_p): Don't check offsets before calling local_symbolic_operand. (legitimize_pic_address): Force offsets bigger than +-16MB into register. * config/i386/i386.h (EXTRA_CONSTRAINT, CONST_COSTS): Likewise. * config/i386/i386-protos.h (x86_64_sign_extended_value): Update prototype. * configure.in: Test for @GOTNTPOFF and @INDNTPOFF on IA-32 too. Add x86-64 test. Set tls_first_minor to 14 on IA-32 and x86-64. * configure: Rebuilt. * config/i386/i386.c (x86_64_sign_extended_value): Don't allow TLS SYMBOL_REFs unless enclosed in UNSPEC. Handle UNSPEC_DTPOFF, UNSPEC_GOTNTPOFF and UNSPEC_NTPOFF. (legitimate_address_p): Allow foo@dtpoff(base) even on TARGET_64BIT -fpic. (ix86_encode_section_info): Don't ever generate TLSGD or TLSLD for non-pic code if TARGET_64BIT. (legitimize_address): Generate 64-bit TLS sequences. (output_pic_addr_const): Support x86-64 TLS operators. (i386_output_dwarf_dtprel): Output 64-bit DTPOFF as .long f@DTPOFF, 0. (print_operand_address): Use %fs instead of %gs on TARGET_64BIT. Don't append (%rip) in 64-bit TLSGD and TLSLD sequences. (output_addr_const_extra): Support x86-64 TLS operators. (maybe_get_pool_constant): Handle TARGET_64BIT -fpic. (ix86_tls_get_addr): Use __tls_get_addr on TARGET_64BIT unconditionally. * config/i386/i386.md (*tls_global_dynamic_gnu): Renamed to... (*tls_global_dynamic_32_gnu): ..., add !TARGET_64BIT. (*tls_global_dynamic_sun): Renamed to... (*tls_global_dynamic_32_sun): ..., add !TARGET_64BIT. (tls_global_dynamic): Renamed to... (tls_global_dynamic_32): ... this. (tls_global_dynamic_64, *tls_global_dynamic_64): New. (*tls_local_dynamic_base_dynamic_gnu): Renamed to... (*tls_local_dynamic_base_dynamic_32_gnu): ..., add !TARGET_64BIT. (*tls_local_dynamic_base_dynamic_sun): Renamed to... (*tls_local_dynamic_base_dynamic_32_sun): ..., add !TARGET_64BIT. (tls_local_dynamic_base_dynamic): Renamed to... (tls_local_dynamic_base_dynamic_32): ... this. (tls_local_dynamic_base_dynamic_64, *tls_local_dynamic_base_dynamic_64): New. (*tls_local_dynamic_once): Renamed to... (*tls_local_dynamic_32_once): ... this. * gcc.dg/tls/pic-1.c: New test. * gcc.dg/tls/nonpic-1.c: New test. * gcc.dg/20021018-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58383 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg/20021018-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/20021018-1.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/20021018-1.c b/gcc/testsuite/gcc.dg/20021018-1.c
new file mode 100644
index 00000000000..f11de4859ef
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20021018-1.c
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fpic" } */
+
+extern void abort (void);
+extern void exit (int);
+
+static const long foo [10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+
+long __attribute__((noinline))
+bar (int x)
+{
+ return foo [x - 0x6ffffffa];
+}
+
+int
+main (void)
+{
+ if (bar (0x6ffffffc) != 2)
+ abort ();
+ exit (0);
+}