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 
53 __attribute__((naked))  void dumpregs () __asm("myfunc");
dumpregs()54 __attribute__((naked))  void dumpregs ()
55 {
56   asm(
57       "mov	ip, sp\n\t"
58       "stmfd	sp!, {r0-r3}\n\t"
59 #ifdef VFP
60       "fstmdbs	sp!, {s0-s15}\n\t"
61       "fstmdbd	sp!, {d0-d7}\n\t"
62 #endif
63       "mov	r0, sp\n\t"
64       "stmfd	sp!, {ip, r14}\n\t"
65       "bl	testfunc\n\t"
66       "ldmfd	sp!, {r0, r14}\n\t"
67       "mov	sp, r0\n\t"
68       "bx	lr");
69 }
70 
71 
72 #define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); }
73 #define ARG(type,val,offset) LAST_ARG(type, val, offset)
74 #define ANON(type,val,offset) LAST_ARG(type, val, offset)
75 #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
76 #define DOTS
77 
testfunc(char * stack)78 void testfunc(char* stack)
79 {
80 #include TESTFILE
81   return;
82 }
83 
84 #undef LAST_ARG
85 #undef ARG
86 #undef DOTS
87 #undef ANON
88 #undef LAST_ANON
89 #define LAST_ARG(type,val,offset) type
90 #define ARG(type,val,offset) LAST_ARG(type, val, offset),
91 #define DOTS ...
92 #define ANON(type,val, offset)
93 #define LAST_ANON(type,val, offset)
94 
95 #ifndef MYFUNCTYPE
96 #define MYFUNCTYPE void
97 #endif
98 
99 #ifndef PCSATTR
100 #define PCSATTR
101 #endif
102 
103 MYFUNCTYPE myfunc(
104 #include TESTFILE
105 ) PCSATTR;
106 
107 #undef LAST_ARG
108 #undef ARG
109 #undef DOTS
110 #undef ANON
111 #undef LAST_ANON
112 #define LAST_ARG(type,val,offset) val
113 #define ARG(type,val,offset) LAST_ARG(type, val, offset),
114 #define DOTS
115 #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
116 #define ANON(type,val,offset) LAST_ARG(type, val, offset),
117 
118 
main()119 int main()
120 {
121   myfunc(
122 #include TESTFILE
123 );
124   return 0;
125 }
126