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..32903a987198628af5ab53e699049e8f2615090a |
--- /dev/null |
+++ b/crosstest/test_vector_ops.h |
@@ -0,0 +1,58 @@ |
+//===- subzero/crosstest/test_vector_ops.h - Test prototypes ----*- C++ -*-===// |
+// |
+// The Subzero Code Generator |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// This file declares the function prototypes for crosstesting insertelement |
+// and extractelement operations. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#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 // TEST_VECTOR_OPS_H |