1#pragma version(1) 2#pragma rs java_package_name(foo) 3 4struct S { int f; } ss; 5 6// accumulator types need not match; function names need not match 7#ifdef __LP64__ 8#pragma rs reduce(aa) accumulator(aaAccum) combiner(aaCombAlpha) outconverter(aaOut) 9#else 10#pragma rs reduce(aa) accumulator(aaAccum) combiner(aaCombBeta) outconverter(aaOut) 11#endif 12static void aaAccum(size_t *a, int v) { } 13static void 14#ifdef __LP64__ 15aaCombAlpha 16#else 17aaCombBeta 18#endif 19(size_t *a, const size_t *other) { } 20static void aaOut(int *out, const size_t *a) { } 21 22// which functions are present need not match; special arguments need not match 23#ifdef __LP64__ 24#pragma rs reduce(bb) accumulator(bbAccum) combiner(bbComb) outconverter(bbOut) 25static void bbOut(int *out, const int *accum) { } 26#else 27#pragma rs reduce(bb) accumulator(bbAccum) combiner(bbComb) 28#endif 29static void bbAccum(int *a, int v, 30#ifdef __LP64__ 31 int x, 32#endif 33 int y) { } 34static void bbComb(int *a, const int *b) { } 35 36// result type must match; ordinary argument types must match 37#pragma rs reduce(cc) accumulator(ccAccum) combiner(ccComb) outconverter(ccOut) 38static void ccAccum(int *accum, char i, size_t j, short k, size_t l) { } 39static void ccComb(int *accum, const int *other) { } 40static void ccOut(size_t *out, const int *accum) { } 41 42// accumulators must have same number of inputs 43#pragma rs reduce(dd) accumulator(ddAccum) combiner(ddComb) 44#ifdef __LP64__ 45static void ddAccum(int *accum, char c) { } 46#else 47static void ddAccum(int *accum, short a, float b) { } 48#endif 49static void ddComb(int *accum, const int *other) { } 50 51// here, 32-bit kernel, 64-bit kernel, or both are not reflected in Java 52#pragma rs reduce(ee) accumulator(eeAccum) combiner(eeComb) outconverter(eeOut) 53#pragma rs reduce(ff) accumulator(ffAccum) combiner(ffComb) outconverter(ffOut) 54#pragma rs reduce(gg) accumulator(ggAccum) outconverter(ggOut) 55#ifdef __LP64__ 56#define EETYPE struct S 57#define FFTYPE int 58#define FFINEXTRA int j 59#else 60#define EETYPE int 61#define FFTYPE struct S 62#define FFINEXTRA int j, int k 63#endif 64static void eeAccum(int *a, int v, size_t k) { } 65static void eeComb(int *a, const int *other) { } 66static void eeOut(EETYPE *out, const int *a) { } 67static void ffAccum(int *a, int v, FFINEXTRA) { } 68static void ffComb(int *a, const int *other) { } 69static void ffOut(FFTYPE *out, const int *a) { } 70static void ggAccum(size_t *a, size_t v) { } 71static void ggOut(struct S *out, const size_t *a) { } 72