1 /*
2  * Copyright 2010 The Native Client Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6 
7 /*
8  * NaCl test for super simple program not using newlib
9  * Try to use as many regs as possible
10  * use gcc -E <src.c> to see what all this macro magic does
11  *
12  * For slower architectures (e.g. ARM) we provide a faster version
13  * which can be selectedted via -DSMALL_REGS_TEST
14  */
15 #if defined(SMALL_REGS_TEST)
16 #define REPEAT    \
17   REPEAT_BODY(00) \
18   REPEAT_BODY(01) \
19   REPEAT_BODY(02) \
20   REPEAT_BODY(03) \
21   REPEAT_BODY(04) \
22   REPEAT_BODY(05) \
23   REPEAT_BODY(06) \
24   REPEAT_BODY(07) \
25   REPEAT_BODY(08) \
26   REPEAT_BODY(09) \
27   REPEAT_BODY(10)
28 #else
29 #define REPEAT    \
30   REPEAT_BODY(00) \
31   REPEAT_BODY(01) \
32   REPEAT_BODY(02) \
33   REPEAT_BODY(03) \
34   REPEAT_BODY(04) \
35   REPEAT_BODY(05) \
36   REPEAT_BODY(06) \
37   REPEAT_BODY(07) \
38   REPEAT_BODY(08) \
39   REPEAT_BODY(09) \
40   REPEAT_BODY(10) \
41   REPEAT_BODY(11) \
42   REPEAT_BODY(12) \
43   REPEAT_BODY(13) \
44   REPEAT_BODY(14) \
45   REPEAT_BODY(15) \
46   REPEAT_BODY(16) \
47   REPEAT_BODY(17) \
48   REPEAT_BODY(18)
49 #endif
50 
51 int dummy = 666;
52 int sum = 55;
53 
54 volatile int STRIDE = 8;
55 
56 #include "barebones.h"
57 
58 /* declare some arrays used by the loops */
59 #undef REPEAT_BODY
60 #define REPEAT_BODY(N) int array ## N [20];
61 REPEAT
62 
63 
main(void)64 int main(void) {
65   /* declare loop variables */
66 #undef REPEAT_BODY
67 #define REPEAT_BODY(N) int i ## N;
68 REPEAT
69 
70   /* declare loop variables */
71 #undef REPEAT_BODY
72 #define REPEAT_BODY(N) for( i ## N = 0 ;  i ## N < 20; i ## N++) \
73     array ## N [ i ## N ] =  i ## N;
74 REPEAT
75 
76   /* now loop */
77 #undef REPEAT_BODY
78 #define REPEAT_BODY(N) for( i ## N = 0;  i ## N < 20; i ## N += STRIDE)
79 REPEAT
80   {
81     /* NOTE: one of the factors is zero, hece we are always adding zero */
82     sum += 1
83 #undef REPEAT_BODY
84 #define REPEAT_BODY(N) * array ## N [i ## N]
85 REPEAT
86            ;
87   }
88   NACL_SYSCALL(exit)(sum);
89   /* UNREACHABLE */
90   return 0;
91 }
92