10 uint64_t
flags = SELFTEST_CPU_FLAG_ARM;
11 if (checkasm_has_vfp())
12 flags |= SELFTEST_CPU_FLAG_VFP;
13 if (checkasm_has_vfpd32())
14 flags |= SELFTEST_CPU_FLAG_VFPD32;
68 typedef void(many_args_func)(int, int, int, int, int);
70 #define DEF_MANY_ARGS_FUNC(NAME) void selftest_##NAME(int, int, int, int, int)
71 #define DEF_MANY_ARGS_GETTER(FLAG, NAME) DEF_GETTER(FLAG, NAME, many_args_func, NULL)
73 DEF_MANY_ARGS_FUNC(clobber_stack_args_arm);
74 DEF_MANY_ARGS_FUNC(clobber_stack_arm);
82 case 0:
return selftest_clobber_r0;
83 case 1:
return selftest_clobber_r1;
84 case 2:
return selftest_clobber_r2;
85 case 3:
return selftest_clobber_r3;
86 case 4:
return selftest_clobber_r4;
87 case 5:
return selftest_clobber_r5;
88 case 6:
return selftest_clobber_r6;
89 case 7:
return selftest_clobber_r7;
90 case 8:
return selftest_clobber_r8;
91 case 9:
return selftest_clobber_r9;
92 case 10:
return selftest_clobber_r10;
93 case 11:
return selftest_clobber_r11;
94 case 12:
return selftest_clobber_r12;
110 case 0:
return selftest_clobber_d0;
111 case 1:
return selftest_clobber_d1;
112 case 2:
return selftest_clobber_d2;
113 case 3:
return selftest_clobber_d3;
114 case 4:
return selftest_clobber_d4;
115 case 5:
return selftest_clobber_d5;
116 case 6:
return selftest_clobber_d6;
117 case 7:
return selftest_clobber_d7;
118 case 8:
return selftest_clobber_d8;
119 case 9:
return selftest_clobber_d9;
120 case 10:
return selftest_clobber_d10;
121 case 11:
return selftest_clobber_d11;
122 case 12:
return selftest_clobber_d12;
123 case 13:
return selftest_clobber_d13;
124 case 14:
return selftest_clobber_d14;
125 case 15:
return selftest_clobber_d15;
126 case 16:
return selftest_clobber_d16;
127 case 17:
return selftest_clobber_d17;
128 case 18:
return selftest_clobber_d18;
129 case 19:
return selftest_clobber_d19;
130 case 20:
return selftest_clobber_d20;
131 case 21:
return selftest_clobber_d21;
132 case 22:
return selftest_clobber_d22;
133 case 23:
return selftest_clobber_d23;
134 case 24:
return selftest_clobber_d24;
135 case 25:
return selftest_clobber_d25;
136 case 26:
return selftest_clobber_d26;
137 case 27:
return selftest_clobber_d27;
138 case 28:
return selftest_clobber_d28;
139 case 29:
return selftest_clobber_d29;
140 case 30:
return selftest_clobber_d30;
141 case 31:
return selftest_clobber_d31;
142 default:
return NULL;
148 DEF_MANY_ARGS_GETTER(SELFTEST_CPU_FLAG_ARM, clobber_stack_args_arm)
149 DEF_MANY_ARGS_GETTER(SELFTEST_CPU_FLAG_ARM, clobber_stack_arm)
151 static void check_clobber_r(
int from,
int to)
155 for (
int reg =
from; reg <
to; reg++) {
168 static void check_clobber_d(
int from,
int to)
172 for (
int reg =
from; reg <
to; reg++) {
185 static void selftest_test_many_args(many_args_func fun,
const char *
name)
201 check_clobber_r(0, 4);
202 check_clobber_r(12, 13);
203 check_clobber_d(0, 8);
204 check_clobber_d(16, 32);
205 selftest_test_many_args(get_clobber_stack_args_arm(),
"clobber_stack_args");
210 selftest_test_many_args(get_clobber_stack_arm(),
"clobber_stack");
212 check_clobber_r(4, 9);
216 check_clobber_r(9, 10);
218 check_clobber_r(10, 11);
219 check_clobber_d(8, 16);