1 | // |
---|
2 | // Cforall Version 1.0.0 Copyright (C) 2023 University of Waterloo |
---|
3 | // |
---|
4 | // The contents of this file are covered under the licence agreement in the |
---|
5 | // file "LICENCE" distributed with Cforall. |
---|
6 | // |
---|
7 | // boxed.hfa -- inter-compile unit dependencies and common macros for the "array boxed" test |
---|
8 | // |
---|
9 | // Author : Mike Brooks |
---|
10 | // Created On : Thu Jul 25 17:00:00 2024 |
---|
11 | // Last Modified By : |
---|
12 | // Last Modified On : |
---|
13 | // Update Count : |
---|
14 | // |
---|
15 | |
---|
16 | // See general test documentation in boxed.main.cfa. |
---|
17 | // See abbreviation definitions in boxed.cases.hfa. |
---|
18 | |
---|
19 | |
---|
20 | #ifdef SUPPRESS_INIT |
---|
21 | #define DECTYVAR(T) T* |
---|
22 | #define INITARR @= {} |
---|
23 | #else |
---|
24 | #define DECTYVAR(T) T |
---|
25 | #define INITARR |
---|
26 | #endif |
---|
27 | |
---|
28 | // ETG definitions |
---|
29 | #define ID(TY) TY |
---|
30 | #define PAIR(TY) pair(TY, TY) |
---|
31 | |
---|
32 | #define DECL( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ); |
---|
33 | |
---|
34 | #define CALL( F_SLUG, TRID, SZS, SZV, ... ) CALL__SZS_ ## SZS( F_SLUG, TRID, SZV, __VA_ARGS__ ) |
---|
35 | #define CALL__SZS_NSTAT( F_SLUG, TRID, SZV, ... ) F_NAME_NSTAT( F_SLUG, TRID ) ( __VA_ARGS__ ) |
---|
36 | #define CALL__SZS_NDYN( F_SLUG, TRID, SZV, ... ) F_NAME_NDYN( F_SLUG, TRID ) ( __VA_ARGS__, SZV ) |
---|
37 | |
---|
38 | #define F_SIG( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__SPS_ ## SPS( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
39 | #define F_SIG__SPS_NA( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_SMPL( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
40 | #define F_SIG__SPS_PPD( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_SMPL( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
41 | #define F_SIG__SPS_PPA( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_ASSN( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
42 | #define F_SIG__SPS_PMA( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_ASSN( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
43 | #define F_SIG__SPS_MPD( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_NONE( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
44 | #define F_SIG__POLY_SMPL( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_SMPL__SZS_ ## SZS( F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) |
---|
45 | #define F_SIG__POLY_SMPL__SZS_NSTAT(F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) forall( DECTYVAR(T) ) OVLD * F_NAME_NSTAT(F_SLUG, TRID ) ( size_t expectedElmSz, const char * tcid, const char * vart ) |
---|
46 | #define F_SIG__POLY_SMPL__SZS_NDYN( F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) forall( DECTYVAR(T) ) OVLD * F_NAME_NDYN( F_SLUG, TRID ) ( size_t expectedElmSz, const char * tcid, const char * vart, size_t n ) |
---|
47 | #define F_SIG__POLY_ASSN( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_ASSN__SZS_ ## SZS( F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) |
---|
48 | #define F_SIG__POLY_ASSN__SZS_NSTAT(F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) forall( DECTYVAR(T) | { DECL_ACCESS( F_SLUG, TRID, ACCS, SPS, SZV ) } ) OVLD * F_NAME_NSTAT(F_SLUG, TRID) ( size_t expectedElmSz, const char * tcid, const char * vart ) |
---|
49 | #define F_SIG__POLY_NONE( F_SLUG, TRID, SZS, SZV, ACCS, SPS, OVLD ) F_SIG__POLY_NONE__SZS_ ## SZS( F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) |
---|
50 | #define F_SIG__POLY_NONE__SZS_NSTAT(F_SLUG, TRID, SZV, ACCS, SPS, OVLD ) OVLD * F_NAME_NSTAT(F_SLUG, TRID) ( size_t expectedElmSz, const char * tcid, const char * vart ) |
---|
51 | |
---|
52 | #define F_NAME_NSTAT( F_SLUG, TRID ) F_SLUG ## _ ## TRID |
---|
53 | #define F_NAME_NDYN( F_SLUG, TRID ) F_SLUG ## _ ## TRID |
---|
54 | |
---|
55 | #define DECL_ACCESS( F_SLUG, TRID, ACCS, SPS, SZ ) void F_NAME_NSTAT( access, TRID ) ( size_t, ACCESS_PARM_TY(ACCS, SZ) ); |
---|
56 | #define ACCESS_PARM_TY(ACCS, SZ) ACCESS_PARM_TY__ACCS_ ## ACCS( SZ ) |
---|
57 | #define ACCESS_PARM_TY__ACCS_PFST(SZ) T * |
---|
58 | #define ACCESS_PARM_TY__ACCS_PARR(SZ) T (*)[SZ] |
---|
59 | |
---|
60 | // Used as the "polymorphic, but not T" element type. |
---|
61 | forall(U, V) |
---|
62 | struct pair { |
---|
63 | U fst; |
---|
64 | V snd; |
---|
65 | }; |
---|
66 | |
---|
67 | // Used as the "larger than a pointer" element type. |
---|
68 | // Size chosen empirically to give buffers larger than the whole stack frame |
---|
69 | // for a pointer-sized element. |
---|
70 | struct bigun { |
---|
71 | long long int a; |
---|
72 | long long int b; |
---|
73 | long long int c; |
---|
74 | long long int d; |
---|
75 | long long int e; |
---|
76 | }; |
---|
77 | |
---|
78 | // Verbose output is unstable from one compiler-target-optimization to another. |
---|
79 | // So it can't run in the overnight test. But it helps see what went wrong. |
---|
80 | #ifdef VERBOSE |
---|
81 | #define VPRT(...) printf(__VA_ARGS__) |
---|
82 | #else |
---|
83 | #define VPRT(...) |
---|
84 | #endif |
---|
85 | |
---|
86 | |
---|
87 | |
---|
88 | |
---|
89 | // defined in bookend.cfa |
---|
90 | |
---|
91 | void bookendInner( void ); |
---|
92 | |
---|
93 | #define TC(...) |
---|
94 | #define TR( TRID, SZS, SZV, ETG, ACCS, SPS, OVLD ) DECL( bookendOuter, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
95 | #include "boxed.cases.hfa" |
---|
96 | #undef TC |
---|
97 | #undef TR |
---|
98 | |
---|
99 | void resetBookends( void ); |
---|
100 | void reportBookends( void ); |
---|
101 | |
---|
102 | extern char * ar_hi; |
---|
103 | extern char * ar_lo; |
---|
104 | |
---|
105 | |
---|
106 | |
---|
107 | // defined in main.cfa |
---|
108 | |
---|
109 | #define TC(...) |
---|
110 | #define TR( TRID, SZS, SZV, ETG, ACCS, SPS, OVLD ) DECL( allocAndAccess, TRID, SZS, SZV, ACCS, SPS, OVLD ) |
---|
111 | #include "boxed.cases.hfa" |
---|
112 | #undef TC |
---|
113 | #undef TR |
---|