| #pragma version(1) |
| #pragma rs java_package_name(foo) |
| |
| struct S { int f; } ss; |
| |
| // accumulator types need not match; function names need not match |
| #ifdef __LP64__ |
| #pragma rs reduce(aa) accumulator(aaAccum) combiner(aaCombAlpha) outconverter(aaOut) |
| #else |
| #pragma rs reduce(aa) accumulator(aaAccum) combiner(aaCombBeta) outconverter(aaOut) |
| #endif |
| static void aaAccum(size_t *a, int v) { } |
| static void |
| #ifdef __LP64__ |
| aaCombAlpha |
| #else |
| aaCombBeta |
| #endif |
| (size_t *a, const size_t *other) { } |
| static void aaOut(int *out, const size_t *a) { } |
| |
| // which functions are present need not match; special arguments need not match |
| #ifdef __LP64__ |
| #pragma rs reduce(bb) accumulator(bbAccum) combiner(bbComb) outconverter(bbOut) |
| static void bbOut(int *out, const int *accum) { } |
| #else |
| #pragma rs reduce(bb) accumulator(bbAccum) combiner(bbComb) |
| #endif |
| static void bbAccum(int *a, int v, |
| #ifdef __LP64__ |
| int x, |
| #endif |
| int y) { } |
| static void bbComb(int *a, const int *b) { } |
| |
| // result type must match; ordinary argument types must match |
| #pragma rs reduce(cc) accumulator(ccAccum) combiner(ccComb) outconverter(ccOut) |
| static void ccAccum(int *accum, char i, size_t j, short k, size_t l) { } |
| static void ccComb(int *accum, const int *other) { } |
| static void ccOut(size_t *out, const int *accum) { } |
| |
| // accumulators must have same number of inputs |
| #pragma rs reduce(dd) accumulator(ddAccum) combiner(ddComb) |
| #ifdef __LP64__ |
| static void ddAccum(int *accum, char c) { } |
| #else |
| static void ddAccum(int *accum, short a, float b) { } |
| #endif |
| static void ddComb(int *accum, const int *other) { } |
| |
| // here, 32-bit kernel, 64-bit kernel, or both are not reflected in Java |
| #pragma rs reduce(ee) accumulator(eeAccum) combiner(eeComb) outconverter(eeOut) |
| #pragma rs reduce(ff) accumulator(ffAccum) combiner(ffComb) outconverter(ffOut) |
| #pragma rs reduce(gg) accumulator(ggAccum) outconverter(ggOut) |
| #ifdef __LP64__ |
| #define EETYPE struct S |
| #define FFTYPE int |
| #define FFINEXTRA int j |
| #else |
| #define EETYPE int |
| #define FFTYPE struct S |
| #define FFINEXTRA int j, int k |
| #endif |
| static void eeAccum(int *a, int v, size_t k) { } |
| static void eeComb(int *a, const int *other) { } |
| static void eeOut(EETYPE *out, const int *a) { } |
| static void ffAccum(int *a, int v, FFINEXTRA) { } |
| static void ffComb(int *a, const int *other) { } |
| static void ffOut(FFTYPE *out, const int *a) { } |
| static void ggAccum(size_t *a, size_t v) { } |
| static void ggOut(struct S *out, const size_t *a) { } |