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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [gcc.dg/] [20020312-2.c] - Blame information for rev 399

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 298 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(__lm32__)
34
/* No pic register.  */
35
#elif defined(__M32R__)
36
/* No pic register.  */
37
#elif defined(__m68k__)
38
# define PIC_REG  "a5"
39
#elif defined(__mc68hc1x__)
40
/* No pic register.  */
41
#elif defined(__mcore__)
42
/* No pic register.  */
43
#elif defined(__mips__)
44
/* PIC register is $28, but is used even without -fpic.  */
45
#elif defined(__MMIX__)
46
/* No pic register.  */
47
#elif defined(__mn10300__)
48
/* No pic register.  */
49
#elif defined(__moxie__)
50
/* No pic register.  */
51 399 jeremybenn
#elif defined(__or32__)
52
/* No pic register.  */
53 298 jeremybenn
#elif defined(__hppa__)
54
/* PIC register is %r27 or %r19, but is used even without -fpic.  */
55
#elif defined(__pdp11__)
56
/* No pic register.  */
57
#elif defined(__powerpc__) || defined(__PPC__) || defined(__POWERPC__) || defined (__ppc)
58
# ifdef __MACH__
59
#  define PIC_REG  "31"
60
# else
61
#  define PIC_REG  "30"
62
# endif
63
#elif defined(__s390__)
64
# define PIC_REG  "12"
65
#elif defined(__sparc__)
66
# define PIC_REG  "l7"
67
#elif defined(__v850)
68
/* No pic register.  */
69
#elif defined(__vax__)
70
/* No pic register.  */
71
#elif defined(__xstormy16__)
72
/* No pic register.  */
73
#elif defined(__XTENSA__)
74
/* No pic register.  */
75
#elif defined(__sh__)
76
# define PIC_REG  "r12"
77
#elif defined(__x86_64__)
78
/* No pic register.  */
79
#elif defined(__m32c__)
80
/* No pic register.  */
81
#elif defined(__SPU__)
82
#  define PIC_REG  "126"
83
#elif defined (__frv__)
84
# ifdef __FRV_FDPIC__
85
#  define PIC_REG "gr15"
86
# else
87
#  define PIC_REG "gr17"
88
#endif
89
#else
90
# error "Modify the test for your target."
91
#endif
92
 
93
#if defined PIC_REG && !defined __PIC__ && !defined __pic__
94
register void *reg __asm__(PIC_REG);
95
#else
96
/* We really need a global register variable set to the PIC register
97
   to expose the bug.  Oh well, let the test case not fail.  */
98
static void *reg;
99
#endif
100
 
101
void * __attribute__((noinline))
102
dummy (void *x)
103
{
104
  return x;
105
}
106
 
107
void
108
f (void)
109
{
110
  goto *dummy (&&bar);
111
  for (;;)
112
    {
113
    foo:
114
      reg = (void *) 1;
115
      if (!reg)
116
        goto baz;
117
      reg = &&foo;
118
    }
119
 
120
 bar:
121
 baz:
122
  reg = 0;
123
}
124
 
125
int
126
main()
127
{
128
  void *old_reg = reg;
129
  reg = (void *) 1;
130
 
131
  f ();
132
 
133
  /* Additionally test that the prologue/epilogue properly does *not*
134
     save and restore global registers.  Not possible when the PIC
135
     register is in a register window, of course.  On Darwin, you can't
136
     call library routines from non-PIC code.  */
137
#if !defined (__sparc__) && !defined(__MACH__)
138
  if (reg)
139
    abort ();
140
#endif
141
 
142
  reg = old_reg;
143
  return 0;
144
}

powered by: WebSVN 2.1.0

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