-
-/* Fast, recycling scm_vector ref */
-#define RVREF(ra, i, e) (e = scm_cvref(ra, i, e))
-
-/* #define RVREF(ra, i, e) (scm_cvref(ra, i, SCM_UNDEFINED)) to turn off */
-
-/* IVDEP means "ignore scm_vector dependencies", meaning we guarantee that
- elements of scm_vector operands are not aliased */
-#ifdef _UNICOS
-#define IVDEP(test, line) if (test) {_Pragma("ivdep"); line} else {line}
-#else
-#define IVDEP(test, line) line
-#endif
-
-\f
-
-/* inds must be a uvect or ivect, no check. */
-
-
-
-/*
- Yes, this is really ugly, but it prevents multiple code
- */
-#define BINARY_ELTS_CODE(OPERATOR, type) \
-do { type *v0 = (type*)SCM_VELTS (ra0);\
- type *v1 = (type*)SCM_VELTS (ra1);\
- IVDEP (ra0 != ra1, \
- for (; n-- > 0; i0 += inc0, i1 += inc1) \
- v0[i0] OPERATOR v1[i1];) \
-} while (0)
-
-/* This macro is used for all but binary division and
- multiplication of complex numbers -- see the expanded
- version in the functions later in this file */
-#define BINARY_PAIR_ELTS_CODE(OPERATOR, type) \
-do { type (*v0)[2] = (type (*)[2]) SCM_VELTS (ra0);\
- type (*v1)[2] = (type (*)[2]) SCM_VELTS (ra1);\
- IVDEP (ra0 != ra1, \
- for (; n-- > 0; i0 += inc0, i1 += inc1) {\
- v0[i0][0] OPERATOR v1[i1][0]; \
- v0[i0][1] OPERATOR v1[i1][1]; \
- }) \
-} while (0)
-
-#define UNARY_ELTS_CODE(OPERATOR, type) \
- do { type *v0 = (type *) SCM_VELTS (ra0);\
- for (; n-- > 0; i0 += inc0) \
- v0[i0] OPERATOR v0[i0];\
- } while (0)
-
-
-/* This macro is used for all but unary divison
- of complex numbers -- see the expanded version in the
- function later in this file. */
-#define UNARY_PAIR_ELTS_CODE(OPERATOR, type) \
- do { type (*v0)[2] = (type (*)[2]) SCM_VELTS (ra0);\
- for (; n-- > 0; i0 += inc0) {\
- v0[i0][0] OPERATOR v0[i0][0];\
- v0[i0][1] OPERATOR v0[i0][1];\
- }\
- break;\
- } while (0)