Index: benchmark/vector/glm_vec2.cc
===================================================================
--- benchmark/vector/glm_vec2.cc	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
+++ benchmark/vector/glm_vec2.cc	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
@@ -0,0 +1,56 @@
+#include <glm/glm.hpp>
+#include <iostream>
+#define BENCH_N 1000000000
+#include "../bench.h"
+
+using namespace glm;
+
+
+int main(int argc, char* argv[]) {
+    tvec2<volatile float> v1(1,2);
+    tvec2<volatile float> v2(20.5f, 30.2f);
+
+    {
+        BENCH(
+            for (int i = 0; i < n; i ++) {
+                volatile float res = dot(v1, v2);
+                asm volatile ("":::"memory");
+            },
+            dot_b
+        );
+        std::cout << "dot: " << dot_b << std::endl;
+    }
+
+    {
+        BENCH(
+            for (int i = 0; i < n; i ++) {
+                volatile vec2 res = v1 + v2;
+                asm volatile ("":::"memory");
+            },
+            add_b
+        );
+        std::cout << "vector addition: " << add_b << std::endl;
+    }
+
+    {
+        BENCH(
+            for (int i = 0; i < n; i ++) {
+                volatile vec2 res = normalize((tvec2<float>)v1);
+                asm volatile ("":::"memory");
+            },
+            normalize_b
+        );
+        std::cout << "normalize: " << normalize_b << std::endl;
+    }
+
+    {
+        BENCH(
+            for (int i = 0; i < n; i ++) {
+                volatile vec2 res = reflect((vec2)v1, (vec2)v2);
+                asm volatile ("":::"memory");
+            },
+            reflect_b
+        );
+        std::cout << "reflect: " << reflect_b << std::endl;
+    }
+}
Index: benchmark/vector/vec2_notemplates.cfa
===================================================================
--- benchmark/vector/vec2_notemplates.cfa	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
+++ benchmark/vector/vec2_notemplates.cfa	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
@@ -0,0 +1,53 @@
+#include "../../libcfa/src/vec/vec2_f.hfa"
+/* #include <fstream.hfa> */
+#define BENCH_N 1000000000
+#include "../bench.h"
+
+int main(int argc, char* argv[]) {
+    volatile vec2 v1 = {1,2};
+    volatile vec2 v2 = {20.5, 30.2};
+
+    {
+        BENCH(
+            for (n) {
+                volatile float res = dot(v1, v2);
+                asm volatile ("":::"memory");
+            },
+            dot_b
+        );
+        printf("dot: %g\n", dot_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2 res = v1 + v2;
+                asm volatile ("":::"memory");
+            },
+            add_b
+        );
+        printf("vector addition: %g\n", add_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2 res = normalize(v1);
+                asm volatile ("":::"memory");
+            },
+            normalize_b
+        );
+        printf("normalize: %g\n", normalize_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2 res = reflect(v1, v2);
+                asm volatile ("":::"memory");
+            },
+            reflect_b
+        );
+        printf("reflect : %g\n", reflect_b);
+    }
+}
Index: benchmark/vector/vec2_templates.cfa
===================================================================
--- benchmark/vector/vec2_templates.cfa	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
+++ benchmark/vector/vec2_templates.cfa	(revision 2fa5bd2f4e4db5f90913cf36b7cbabea394c69ce)
@@ -0,0 +1,53 @@
+#include "../../libcfa/src/vec/vec2.hfa"
+/* #include <fstream.hfa> */
+/* #define BENCH_N 1000000 */
+#include "../bench.h"
+
+int main(int argc, char* argv[]) {
+    volatile vec2(float) v1 = {1,2};
+    volatile vec2(float) v2 = {20.5f, 30.2f};
+
+    {
+        BENCH(
+            for (n) {
+                volatile float res = dot(v1, v2);
+                asm volatile ("":::"memory");
+            },
+            dot_b
+        );
+        printf("dot: %g\n", dot_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2(float) res = v1 + v2;
+                asm volatile ("":::"memory");
+            },
+            add_b
+        );
+        printf("vector addition: %g\n", add_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2(float) res = normalize(v1);
+                asm volatile ("":::"memory");
+            },
+            normalize_b
+        );
+        printf("normalize: %g\n", normalize_b);
+    }
+
+    {
+        BENCH(
+            for (n) {
+                volatile vec2(float) res = reflect(v1, v2);
+                asm volatile ("":::"memory");
+            },
+            reflect_b
+        );
+        printf("reflect : %g\n", reflect_b);
+    }
+}
