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)64int 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