1#include <stdarg.h> 2 3#include "compat-common.h" 4 5#ifdef SKIP_VA 6const int test_va = 0; 7#else 8const int test_va = 1; 9#endif 10 11typedef struct { char c; } Sc; 12typedef struct { short s; } Ss; 13typedef struct { int i; } Si; 14typedef struct { short s; char c; } Ssc; 15typedef struct { int i; short s; } Sis; 16typedef struct { char c; short s; int i; } Scsi; 17typedef struct { char c; int i; short s; } Scis; 18 19void initSc (Sc *p, int i) { p->c = i/16; } 20void initSs (Ss *p, int i) { p->s = i; } 21void initSi (Si *p, int i) { p->i = i; } 22void initSsc (Ssc *p, int i) { p->s = i; p->c = (i/16)+1; } 23void initSis (Sis *p, int i) { p->i = i; p->s = i+1; } 24void initScsi (Scsi *p, int i) { p->c = i/16; p->s = i+1; p->i = i+2; } 25void initScis (Scis *p, int i) { p->c = i/16; p->i = i+1; p->s = i+2; } 26 27#define T(N, TYPE) \ 28struct S##TYPE##N { TYPE i[N]; }; \ 29 \ 30extern struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \ 31extern struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \ 32extern struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \ 33extern struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \ 34extern struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \ 35extern struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \ 36extern struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \ 37extern struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \ 38 \ 39extern void check##TYPE (TYPE x, int i); \ 40extern void \ 41check##TYPE##N (struct S##TYPE##N *p, int i); \ 42 \ 43void \ 44checkg##TYPE##N (void) \ 45{ \ 46 check##TYPE##N ( &g1s##TYPE##N, 1*16); \ 47 check##TYPE##N ( &g2s##TYPE##N, 2*16); \ 48 check##TYPE##N ( &g3s##TYPE##N, 3*16); \ 49 check##TYPE##N ( &g4s##TYPE##N, 4*16); \ 50 check##TYPE##N ( &g5s##TYPE##N, 5*16); \ 51 check##TYPE##N ( &g6s##TYPE##N, 6*16); \ 52 check##TYPE##N ( &g7s##TYPE##N, 7*16); \ 53 check##TYPE##N ( &g8s##TYPE##N, 8*16); \ 54 check##TYPE##N ( &g9s##TYPE##N, 9*16); \ 55 check##TYPE##N (&g10s##TYPE##N, 10*16); \ 56 check##TYPE##N (&g11s##TYPE##N, 11*16); \ 57 check##TYPE##N (&g12s##TYPE##N, 12*16); \ 58 check##TYPE##N (&g13s##TYPE##N, 13*16); \ 59 check##TYPE##N (&g14s##TYPE##N, 14*16); \ 60 check##TYPE##N (&g15s##TYPE##N, 15*16); \ 61 check##TYPE##N (&g16s##TYPE##N, 16*16); \ 62} \ 63 \ 64void \ 65test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \ 66 struct S##TYPE##N s3, struct S##TYPE##N s4, \ 67 struct S##TYPE##N s5, struct S##TYPE##N s6, \ 68 struct S##TYPE##N s7, struct S##TYPE##N s8, \ 69 struct S##TYPE##N s9, struct S##TYPE##N s10, \ 70 struct S##TYPE##N s11, struct S##TYPE##N s12, \ 71 struct S##TYPE##N s13, struct S##TYPE##N s14, \ 72 struct S##TYPE##N s15, struct S##TYPE##N s16) \ 73{ \ 74 check##TYPE##N (&s1, 1*16); \ 75 check##TYPE##N (&s2, 2*16); \ 76 check##TYPE##N (&s3, 3*16); \ 77 check##TYPE##N (&s4, 4*16); \ 78 check##TYPE##N (&s5, 5*16); \ 79 check##TYPE##N (&s6, 6*16); \ 80 check##TYPE##N (&s7, 7*16); \ 81 check##TYPE##N (&s8, 8*16); \ 82 check##TYPE##N (&s9, 9*16); \ 83 check##TYPE##N (&s10, 10*16); \ 84 check##TYPE##N (&s11, 11*16); \ 85 check##TYPE##N (&s12, 12*16); \ 86 check##TYPE##N (&s13, 13*16); \ 87 check##TYPE##N (&s14, 14*16); \ 88 check##TYPE##N (&s15, 15*16); \ 89 check##TYPE##N (&s16, 16*16); \ 90} \ 91 \ 92void \ 93testva##TYPE##N (int n, ...) \ 94{ \ 95 int i; \ 96 va_list ap; \ 97 if (test_va) \ 98 { \ 99 va_start (ap, n); \ 100 for (i = 0; i < n; i++) \ 101 { \ 102 struct S##TYPE##N t = va_arg (ap, struct S##TYPE##N); \ 103 check##TYPE##N (&t, (i+1)*16); \ 104 } \ 105 va_end (ap); \ 106 } \ 107} 108 109#ifndef SKIP_ZERO_ARRAY 110T(0, Scsi) 111#endif 112T(1, Scsi) 113T(2, Scsi) 114T(3, Scsi) 115T(4, Scsi) 116T(5, Scsi) 117T(6, Scsi) 118T(7, Scsi) 119T(8, Scsi) 120T(9, Scsi) 121T(10, Scsi) 122T(11, Scsi) 123T(12, Scsi) 124T(13, Scsi) 125T(14, Scsi) 126T(15, Scsi) 127#ifndef SKIP_ZERO_ARRAY 128T(0, Scis) 129#endif 130T(1, Scis) 131T(2, Scis) 132T(3, Scis) 133T(4, Scis) 134T(5, Scis) 135T(6, Scis) 136T(7, Scis) 137T(8, Scis) 138T(9, Scis) 139T(10, Scis) 140T(11, Scis) 141T(12, Scis) 142T(13, Scis) 143T(14, Scis) 144T(15, Scis) 145