blob: 10b3d85882ec073a0eca327e3323472798f759cd [file] [log] [blame]
#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) { }