source: tests/array-collections/boxed.hfa @ fd4df379

Last change on this file since fd4df379 was fd4df379, checked in by Michael Brooks <mlbrooks@…>, 4 months ago

Implement boxing for arrays.

The added test is things that did not work before.

  • Property mode set to 100644
File size: 4.7 KB
Line 
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.
61forall(U, V)
62struct 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.
70struct 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
91void 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
99void resetBookends( void );
100void reportBookends( void );
101
102extern char * ar_hi;
103extern 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
Note: See TracBrowser for help on using the repository browser.