1  /* PR target/96350 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-fcf-protection -O2" } */
       4  /* { dg-final { scan-assembler-not "$-81915917" { target { ia32 } } } } */
       5  /* { dg-final { scan-assembler-not "$-98693133" { target { ! ia32 } } } } *
       6  /* { dg-final { scan-assembler-not "$-423883778574778368" { target { ! ia32 } } } } */
       7  /* { dg-final { scan-assembler "\[ \t\]*-81915917" { target { ia32 } } } } */
       8  /* { dg-final { scan-assembler "\[ \t\]*-98693133" { target { ! ia32 } } } } */
       9  /* { dg-final { scan-assembler "\[ \t\]*-423883778574778368" { target { ! ia32 } } } } */
      10  
      11  
      12  #ifdef __x86_64__
      13  #define ENDBR_IMMEDIATE 0xfa1e0ff3
      14  #define EXTEND_ENDBR_IMMEDIATE 0xfa1e0ff300000000
      15  #else
      16  #define ENDBR_IMMEDIATE 0xfb1e0ff3
      17  #define EXTEND_ENDBR_IMMEDIATE 0xfffb1e0ff300
      18  #endif
      19  
      20  int
      21  foo (int a)
      22  {
      23    return a + ENDBR_IMMEDIATE;
      24  }
      25  
      26  int
      27  foo2 (int a)
      28  {
      29    return a - ENDBR_IMMEDIATE;
      30  }
      31  
      32  int
      33  foo3 (int a)
      34  {
      35    return a * ENDBR_IMMEDIATE;
      36  }
      37  
      38  int
      39  foo4 (int a)
      40  {
      41    return a | ENDBR_IMMEDIATE;
      42  }
      43  
      44  int
      45  foo5 (int a)
      46  {
      47    return a ^ ENDBR_IMMEDIATE;
      48  }
      49  
      50  int
      51  foo6 (int a)
      52  {
      53    return a & ENDBR_IMMEDIATE;
      54  }
      55  
      56  int
      57  foo7 (int a)
      58  {
      59    return a > ENDBR_IMMEDIATE;
      60  }
      61  
      62  int
      63  foo8 (int a)
      64  {
      65    return ENDBR_IMMEDIATE;
      66  }
      67  
      68  int
      69  foo9 (int* p)
      70  {
      71    return *(p + ENDBR_IMMEDIATE);
      72  }
      73  
      74  int
      75  foo10 (int* p)
      76  {
      77    return *(int*) ENDBR_IMMEDIATE;
      78  }
      79  
      80  long long
      81  foo11 (long long a)
      82  {
      83    return a + EXTEND_ENDBR_IMMEDIATE;
      84  }
      85  
      86  long long
      87  foo12 (long long a)
      88  {
      89    return a - EXTEND_ENDBR_IMMEDIATE;
      90  }
      91  
      92  long long
      93  foo13 (long long a)
      94  {
      95    return a * EXTEND_ENDBR_IMMEDIATE;
      96  }
      97  
      98  long long
      99  foo14 (long long a)
     100  {
     101    return a | EXTEND_ENDBR_IMMEDIATE;
     102  }
     103  
     104  long long
     105  foo15 (long long a)
     106  {
     107    return a ^ EXTEND_ENDBR_IMMEDIATE;
     108  }
     109  
     110  long long
     111  foo16 (long long a)
     112  {
     113    return a & EXTEND_ENDBR_IMMEDIATE;
     114  }
     115  
     116  long long
     117  foo17 (long long a)
     118  {
     119    return a > EXTEND_ENDBR_IMMEDIATE;
     120  }
     121  
     122  long long
     123  foo18 (long long a)
     124  {
     125    return EXTEND_ENDBR_IMMEDIATE;
     126  }
     127  
     128  long long
     129  foo19 (long long* p)
     130  {
     131    return *(p + EXTEND_ENDBR_IMMEDIATE);
     132  }
     133  
     134  long long
     135  foo20 (long long* p)
     136  {
     137    return *(long long*) EXTEND_ENDBR_IMMEDIATE;
     138  }
     139  
     140  long long
     141  foo21 (int a)
     142  {
     143    return a + ENDBR_IMMEDIATE;
     144  }
     145  
     146  long long
     147  foo22 (int a)
     148  {
     149    return a - ENDBR_IMMEDIATE;
     150  }
     151  
     152  long long
     153  foo23 (long long a)
     154  {
     155    return a * ENDBR_IMMEDIATE;
     156  }
     157  
     158  long long
     159  foo24 (int a)
     160  {
     161    return a | ENDBR_IMMEDIATE;
     162  }
     163  
     164  long long
     165  foo25 (int a)
     166  {
     167    return a ^ ENDBR_IMMEDIATE;
     168  }
     169  
     170  long long
     171  foo26 (int a)
     172  {
     173    return a & ENDBR_IMMEDIATE;
     174  }
     175  
     176  long long
     177  foo27 (int a)
     178  {
     179    return a > ENDBR_IMMEDIATE;
     180  }
     181  
     182  long long
     183  foo28 (int a)
     184  {
     185    return ENDBR_IMMEDIATE;
     186  }
     187  
     188  long long
     189  foo29 (int* p)
     190  {
     191    return *(p + ENDBR_IMMEDIATE);
     192  }
     193  
     194  long long
     195  foo30 (int* p)
     196  {
     197    return *(long long*) ENDBR_IMMEDIATE;
     198  }