Index: crosstest/test_vector_ops.h |
diff --git a/crosstest/test_vector_ops.h b/crosstest/test_vector_ops.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..60654dc382f6486e3a1f2e2f8ee6107eb63a3989 |
--- /dev/null |
+++ b/crosstest/test_vector_ops.h |
@@ -0,0 +1,44 @@ |
+#ifndef TEST_VECTOR_OPS_H |
+#define TEST_VECTOR_OPS_H |
+ |
+#include "vectors.h" |
+ |
+// The VectorOps<> class acts like Vectors<> but also has insertelement, |
+// Subzero_insertelement, extractelement, and Subzero_extractelement |
+// fields. |
+ |
+template <typename T> struct VectorOps; |
+#define FIELD(TYNAME, FIELDNAME) VectorOps<TYNAME>::FIELDNAME |
+#define TY(TYNAME) FIELD(TYNAME, Ty) |
+#define CASTTY(TYNAME) FIELD(TYNAME, CastTy) |
+#define DECLARE_VECTOR_OPS(NAME) \ |
+ template <> struct VectorOps<NAME> : public Vectors<NAME> { \ |
+ static Ty (*insertelement)(Ty, CastTy, int32_t); \ |
+ static CastTy (*extractelement)(Ty, int32_t); \ |
+ static Ty (*Subzero_insertelement)(Ty, CastTy, int32_t); \ |
+ static CastTy (*Subzero_extractelement)(Ty, int32_t); \ |
+ }; \ |
+ extern "C" { \ |
+ TY(NAME) insertelement_##NAME(TY(NAME), CASTTY(NAME), int32_t); \ |
+ TY(NAME) Subzero_insertelement_##NAME(TY(NAME), CASTTY(NAME), int32_t); \ |
+ CASTTY(NAME) extractelement_##NAME(TY(NAME), int32_t); \ |
+ CASTTY(NAME) Subzero_extractelement_##NAME(TY(NAME), int32_t); \ |
+ } \ |
+ TY(NAME) (*FIELD(NAME, insertelement))(TY(NAME), CASTTY(NAME), int32_t) = \ |
+ &insertelement_##NAME; \ |
+ TY(NAME) (*FIELD(NAME, Subzero_insertelement))( \ |
+ TY(NAME), CASTTY(NAME), int32_t) = &Subzero_insertelement_##NAME; \ |
+ CASTTY(NAME) (*FIELD(NAME, extractelement))(TY(NAME), int32_t) = \ |
+ &extractelement_##NAME; \ |
+ CASTTY(NAME) (*FIELD(NAME, Subzero_extractelement))(TY(NAME), int32_t) = \ |
+ &Subzero_extractelement_##NAME; |
+ |
+#define X(ty, eltty, castty) DECLARE_VECTOR_OPS(ty) |
+VECTOR_TYPE_TABLE |
+#undef X |
+ |
+#define X(ty, eltty, numelements) DECLARE_VECTOR_OPS(ty) |
+I1_VECTOR_TYPE_TABLE |
+#undef X |
+ |
+#endif |