(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
aapcs/
abitest.h
       1  
       2  #define IN_FRAMEWORK
       3  
       4  #ifdef VFP
       5  #define D0	0
       6  #define D1	8
       7  #define D2	16
       8  #define D3	24
       9  #define D4	32
      10  #define D5	40
      11  #define D6	48
      12  #define D7	56
      13  
      14  #ifdef NEON
      15  #define Q0      D0
      16  #define Q1      D2
      17  #define Q2      D4
      18  #define Q3      D6
      19  #endif
      20  
      21  #define S0	64
      22  #define S1	68
      23  #define S2	72
      24  #define S3	76
      25  #define S4	80
      26  #define S5	84
      27  #define S6	88
      28  #define S7	92
      29  #define S8      86
      30  #define S9	100
      31  #define S10	104
      32  #define S11	108
      33  #define S12	112
      34  #define S13	116
      35  #define S14	120
      36  #define S15	124
      37  
      38  #define CORE_REG_START 128
      39  #else
      40  #define CORE_REG_START 0
      41  #endif
      42  
      43  #define R0	CORE_REG_START
      44  #define R1	(R0 + 4)
      45  #define R2	(R1 + 4)
      46  #define R3	(R2 + 4)
      47  #define STACK	(R3 + 4)
      48  
      49  
      50  
      51  extern void abort (void);
      52  extern int memcmp (const void *s1, const void *s2, __SIZE_TYPE__ n);
      53  
      54  __attribute__((naked))  void dumpregs () __asm("myfunc");
      55  __attribute__((naked))  void dumpregs ()
      56  {
      57    asm(
      58        "mov	ip, sp\n\t"
      59        "stmfd	sp!, {r0-r3}\n\t"
      60  #ifdef VFP
      61        "fstmdbs	sp!, {s0-s15}\n\t"
      62        "fstmdbd	sp!, {d0-d7}\n\t"
      63  #endif
      64        "mov	r0, sp\n\t"
      65        "stmfd	sp!, {ip, r14}\n\t"
      66        "bl	testfunc\n\t"
      67        "ldmfd	sp!, {r0, r14}\n\t"
      68        "mov	sp, r0\n\t"
      69        "bx	lr");
      70  }
      71  
      72  
      73  #define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); }
      74  #define ARG(type,val,offset) LAST_ARG(type, val, offset)
      75  #define ANON(type,val,offset) LAST_ARG(type, val, offset)
      76  #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
      77  #define DOTS
      78  
      79  void testfunc(char* stack)
      80  {
      81  #include TESTFILE
      82    return;
      83  }
      84  
      85  #undef LAST_ARG
      86  #undef ARG
      87  #undef DOTS
      88  #undef ANON
      89  #undef LAST_ANON
      90  #define LAST_ARG(type,val,offset) type
      91  #define ARG(type,val,offset) LAST_ARG(type, val, offset),
      92  #define DOTS ...
      93  #define ANON(type,val, offset)
      94  #define LAST_ANON(type,val, offset)
      95  
      96  #ifndef MYFUNCTYPE
      97  #define MYFUNCTYPE void
      98  #endif
      99  
     100  #ifndef PCSATTR
     101  #define PCSATTR
     102  #endif
     103  
     104  MYFUNCTYPE myfunc(
     105  #include TESTFILE
     106  ) PCSATTR;
     107  
     108  #undef LAST_ARG
     109  #undef ARG
     110  #undef DOTS
     111  #undef ANON
     112  #undef LAST_ANON
     113  #define LAST_ARG(type,val,offset) val
     114  #define ARG(type,val,offset) LAST_ARG(type, val, offset),
     115  #define DOTS
     116  #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
     117  #define ANON(type,val,offset) LAST_ARG(type, val, offset),
     118  
     119  
     120  int main()
     121  {
     122    myfunc(
     123  #include TESTFILE
     124  );
     125    return 0;
     126  }