OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.dg/] [20020312-2.c] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 149 jeremybenn
/* PR 5878.
2
 
3
   We ICEd in verify_local_live_at_start because we incorrectly forced
4
   the PIC register live between BAR and BAZ.  We did this because the
5
   definition of PIC_OFFSET_TABLE_REGNUM was incorrectly not INVALID_REGNUM
6
   when !flag_pic for most targets.  */
7
 
8
/* { dg-do run } */
9
/* { dg-options "-O -fno-pic" } */
10
 
11
extern void abort (void);
12
 
13
#if defined(__alpha__)
14
/* PIC register is $29, but is used even without -fpic.  */
15
#elif defined(__arc__)
16
# define PIC_REG  "26"
17
#elif defined(__arm__)
18
# define PIC_REG  "9"
19
#elif defined(AVR)
20
/* No pic register.  */
21
#elif defined(__cris__)
22
# define PIC_REG  "0"
23
#elif defined(__fr30__)
24
/* No pic register.  */
25
#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__)
26
/* No pic register.  */
27
#elif defined(_IBMR2)
28
/* No pic register.  */
29
#elif defined(__i386__)
30
# define PIC_REG  "ebx"
31
#elif defined(__ia64__)
32
/* PIC register is r1, but is used even without -fpic.  */
33
#elif defined(__M32R__)
34
/* No pic register.  */
35
#elif defined(__m68k__)
36
# define PIC_REG  "a5"
37
#elif defined(__mc68hc1x__)
38
/* No pic register.  */
39
#elif defined(__mcore__)
40
/* No pic register.  */
41
#elif defined(__mips__)
42
/* PIC register is $28, but is used even without -fpic.  */
43
#elif defined(__MMIX__)
44
/* No pic register.  */
45
#elif defined(__mn10300__)
46
/* No pic register.  */
47
#elif defined(__hppa__)
48
/* PIC register is %r27 or %r19, but is used even without -fpic.  */
49
#elif defined(__pdp11__)
50
/* No pic register.  */
51
#elif defined(__powerpc__) || defined(__PPC__) || defined(__POWERPC__)
52
# ifdef __MACH__
53
#  define PIC_REG  "31"
54
# else
55
#  define PIC_REG  "30"
56
# endif
57
#elif defined(__s390__)
58
# define PIC_REG  "12"
59
#elif defined(__sparc__)
60
# define PIC_REG  "l7"
61
#elif defined(__v850)
62
/* No pic register.  */
63
#elif defined(__vax__)
64
/* No pic register.  */
65
#elif defined(__xstormy16__)
66
/* No pic register.  */
67
#elif defined(__XTENSA__)
68
/* No pic register.  */
69
#elif defined(__sh__)
70
# define PIC_REG  "r12"
71
#elif defined(__x86_64__)
72
/* No pic register.  */
73
#elif defined(__m32c__)
74
/* No pic register.  */
75
#else
76
# error "Modify the test for your target."
77
#endif
78
 
79
#if defined PIC_REG && !defined __PIC__ && !defined __pic__
80
register void *reg __asm__(PIC_REG);
81
#else
82
/* We really need a global register variable set to the PIC register
83
   to expose the bug.  Oh well, let the test case not fail.  */
84
static void *reg;
85
#endif
86
 
87
void * __attribute__((noinline))
88
dummy (void *x)
89
{
90
  return x;
91
}
92
 
93
void
94
f (void)
95
{
96
  goto *dummy (&&bar);
97
  for (;;)
98
    {
99
    foo:
100
      reg = (void *) 1;
101
      if (!reg)
102
        goto baz;
103
      reg = &&foo;
104
    }
105
 
106
 bar:
107
 baz:
108
  reg = 0;
109
}
110
 
111
int
112
main()
113
{
114
  void *old_reg = reg;
115
  reg = (void *) 1;
116
 
117
  f ();
118
 
119
  /* Additionally test that the prologue/epilogue properly does *not*
120
     save and restore global registers.  Not possible when the PIC
121
     register is in a register window, of course.  On Darwin, you can't
122
     call library routines from non-PIC code.  */
123
#if !defined (__sparc__) && !defined(__MACH__)
124
  if (reg)
125
    abort ();
126
#endif
127
 
128
  reg = old_reg;
129
  return 0;
130
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.