(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.target/
aarch64/
bitfield-abi-warning.h
       1  #include <stdarg.h>
       2  
       3  typedef unsigned long long ull __attribute__((aligned(ALIGN)));
       4  
       5  #ifndef EXTRA
       6  #define EXTRA unsigned long long x;
       7  #endif
       8  
       9  struct S1  { __attribute__((aligned(1))) ull i : 1; EXTRA };
      10  struct S2  { __attribute__((aligned(2))) ull i : 1; EXTRA };
      11  struct S4  { __attribute__((aligned(4))) ull i : 1; EXTRA };
      12  struct S8  { __attribute__((aligned(8))) ull i : 1; EXTRA };
      13  struct S16 { __attribute__((aligned(16))) ull i : 1; EXTRA };
      14  
      15  struct Sp   { ull i : 1; EXTRA }__attribute__((packed));
      16  struct S1p  { __attribute__((packed, aligned(1))) ull i : 1; EXTRA };
      17  struct S2p  { __attribute__((packed, aligned(2))) ull i : 1; EXTRA };
      18  struct S4p  { __attribute__((packed, aligned(4))) ull i : 1; EXTRA };
      19  struct S8p  { __attribute__((packed, aligned(8))) ull i : 1; EXTRA };
      20  struct S16p { __attribute__((packed, aligned(16))) ull i : 1; EXTRA };
      21  
      22  /* Bitfield in registers.  */
      23  #define PARAMS(xx) int a0, struct S##xx s, ull a1
      24  /* Bitfield passed by the stack.  */
      25  #define PARAMS_STACK(xx) int a0, ull a1, ull a2, ull a3, ull a4, ull a5, ull a6, ull a7, ull a8, struct S##xx t
      26  /* Bitfield passed via stdarg.  */
      27  #define PARAMS_STDARG(xx) int a0, ...
      28  
      29  #define CODE(xx)				\
      30    return s.i;
      31  
      32  #define CODE_STACK(xx)				\
      33    return t.i;
      34  
      35  #define CODE_STDARG(xx)				\
      36    va_list ap;					\
      37    struct S##xx arg;				\
      38    __builtin_va_start(ap,a0);			\
      39    arg = __builtin_va_arg(ap, struct S##xx);	\
      40    return arg.i;
      41  
      42  #define ARGS(xx) x, (struct S##xx) { x }, x
      43  #define ARGS_STACK(xx) x, x, x, x, x, x, x, x, x, (struct S##xx) { x }
      44  #define ARGS_STDARG(xx) x, (struct S##xx) { x }
      45  
      46  /* Bitfield in registers.  */
      47  int __attribute__ ((noipa)) f1 (PARAMS(1))  { CODE(1) }
      48  int __attribute__ ((noipa)) f2 (PARAMS(2))  { CODE(2) }
      49  int __attribute__ ((noipa)) f4 (PARAMS(4))  { CODE(4) }
      50  int __attribute__ ((noipa)) f8 (PARAMS(8))  { CODE(8) }
      51  int __attribute__ ((noipa)) f16(PARAMS(16)) { CODE(16) }
      52  
      53  int __attribute__ ((noipa)) fp  (PARAMS(p))   { CODE(p) }
      54  int __attribute__ ((noipa)) f1p (PARAMS(1p))  { CODE(1p) }
      55  int __attribute__ ((noipa)) f2p (PARAMS(2p))  { CODE(2p) }
      56  int __attribute__ ((noipa)) f4p (PARAMS(4p))  { CODE(4p) }
      57  int __attribute__ ((noipa)) f8p (PARAMS(8p))  { CODE(8p) }
      58  int __attribute__ ((noipa)) f16p(PARAMS(16p)) { CODE(16p) }
      59  
      60  int g1 (int x) { return f1 (ARGS(1)); }
      61  int g2 (int x) { return f2 (ARGS(2)); }
      62  int g4 (int x) { return f4 (ARGS(4)); }
      63  int g8 (int x) { return f8 (ARGS(8)); }
      64  int g16(int x) { return f16 (ARGS(16)); }
      65  
      66  int gp  (int x) { return fp   (ARGS(p)); }
      67  int g1p (int x) { return f1p  (ARGS(1p)); }
      68  int g2p (int x) { return f2p  (ARGS(2p)); }
      69  int g4p (int x) { return f4p  (ARGS(4p)); }
      70  int g8p (int x) { return f8p  (ARGS(8p)); }
      71  int g16p(int x) { return f16p (ARGS(16p)); }
      72  
      73  /* Bitfield in the stack.  */
      74  int __attribute__ ((noipa)) f1_stack (PARAMS_STACK(1))  { CODE_STACK(1) }
      75  int __attribute__ ((noipa)) f2_stack (PARAMS_STACK(2))  { CODE_STACK(2) }
      76  int __attribute__ ((noipa)) f4_stack (PARAMS_STACK(4))  { CODE_STACK(4) }
      77  int __attribute__ ((noipa)) f8_stack (PARAMS_STACK(8))  { CODE_STACK(8) }
      78  int __attribute__ ((noipa)) f16_stack(PARAMS_STACK(16)) { CODE_STACK(16) }
      79  
      80  int __attribute__ ((noipa)) fp_stack  (PARAMS_STACK(p))   { CODE_STACK(p) }
      81  int __attribute__ ((noipa)) f1p_stack (PARAMS_STACK(1p))  { CODE_STACK(1p) }
      82  int __attribute__ ((noipa)) f2p_stack (PARAMS_STACK(2p))  { CODE_STACK(2p) }
      83  int __attribute__ ((noipa)) f4p_stack (PARAMS_STACK(4p))  { CODE_STACK(4p) }
      84  int __attribute__ ((noipa)) f8p_stack (PARAMS_STACK(8p))  { CODE_STACK(8p) }
      85  int __attribute__ ((noipa)) f16p_stack(PARAMS_STACK(16p)) { CODE_STACK(16p) }
      86  
      87  int g1_stack (int x) { return f1_stack (ARGS_STACK(1)); }
      88  int g2_stack (int x) { return f2_stack (ARGS_STACK(2)); }
      89  int g4_stack (int x) { return f4_stack (ARGS_STACK(4)); }
      90  int g8_stack (int x) { return f8_stack (ARGS_STACK(8)); }
      91  int g16_stack(int x) { return f16_stack (ARGS_STACK(16)); }
      92  
      93  int gp_stack  (int x) { return fp_stack (ARGS_STACK(p)); }
      94  int g1p_stack (int x) { return f1p_stack (ARGS_STACK(1p)); }
      95  int g2p_stack (int x) { return f2p_stack (ARGS_STACK(2p)); }
      96  int g4p_stack (int x) { return f4p_stack (ARGS_STACK(4p)); }
      97  int g8p_stack (int x) { return f8p_stack (ARGS_STACK(8p)); }
      98  int g16p_stack(int x) { return f16p_stack (ARGS_STACK(16p)); }
      99  
     100  /* Bitfield  via stdarg.  */
     101  int __attribute__ ((noipa)) f1_stdarg (PARAMS_STDARG(1))  { CODE_STDARG(1) }
     102  int __attribute__ ((noipa)) f2_stdarg (PARAMS_STDARG(2))  { CODE_STDARG(2) }
     103  int __attribute__ ((noipa)) f4_stdarg (PARAMS_STDARG(4))  { CODE_STDARG(4) }
     104  int __attribute__ ((noipa)) f8_stdarg (PARAMS_STDARG(8))  { CODE_STDARG(8) }
     105  int __attribute__ ((noipa)) f16_stdarg(PARAMS_STDARG(16)) { CODE_STDARG(16) }
     106  
     107  int __attribute__ ((noipa)) fp_stdarg  (PARAMS_STDARG(p))   { CODE_STDARG(p) }
     108  int __attribute__ ((noipa)) f1p_stdarg (PARAMS_STDARG(1p))  { CODE_STDARG(1p) }
     109  int __attribute__ ((noipa)) f2p_stdarg (PARAMS_STDARG(2p))  { CODE_STDARG(2p) }
     110  int __attribute__ ((noipa)) f4p_stdarg (PARAMS_STDARG(4p))  { CODE_STDARG(4p) }
     111  int __attribute__ ((noipa)) f8p_stdarg (PARAMS_STDARG(8p))  { CODE_STDARG(8p) }
     112  int __attribute__ ((noipa)) f16p_stdarg(PARAMS_STDARG(16p)) { CODE_STDARG(16p) }
     113  
     114  int g1_stdarg (int x) { return f1_stdarg (ARGS_STDARG(1)); }
     115  int g2_stdarg (int x) { return f2_stdarg (ARGS_STDARG(2)); }
     116  int g4_stdarg (int x) { return f4_stdarg (ARGS_STDARG(4)); }
     117  int g8_stdarg (int x) { return f8_stdarg (ARGS_STDARG(8)); }
     118  int g16_stdarg(int x) { return f16_stdarg (ARGS_STDARG(16)); }
     119  
     120  int gp_stdarg  (int x) { return fp_stdarg (ARGS_STDARG(p)); }
     121  int g1p_stdarg (int x) { return f1p_stdarg (ARGS_STDARG(1p)); }
     122  int g2p_stdarg (int x) { return f2p_stdarg (ARGS_STDARG(2p)); }
     123  int g4p_stdarg (int x) { return f4p_stdarg (ARGS_STDARG(4p)); }
     124  int g8p_stdarg (int x) { return f8p_stdarg (ARGS_STDARG(8p)); }
     125  int g16p_stdarg(int x) { return f16p_stdarg (ARGS_STDARG(16p)); }