changeset 46:31cee67540b5

f32/f64: add floor, ceil, round, and trunc operations we also need saturated add sub mul etc
author Paper <paper@tflc.us>
date Sat, 09 Aug 2025 15:55:59 -0400
parents 7955bed1d169
children d26d22c602bd
files gen/gendouble.c gen/gengeneric.c gen/genlib.c gen/genlib.h include/vec/impl/double.h include/vec/impl/generic.h include/vec/mem.h test/test.c test/test_arith.h
diffstat 9 files changed, 2575 insertions(+), 887 deletions(-) [+]
line wrap: on
line diff
--- a/gen/gendouble.c	Wed Apr 30 18:36:38 2025 -0400
+++ b/gen/gendouble.c	Sat Aug 09 15:55:59 2025 -0400
@@ -24,123 +24,6 @@
 
 #include "genlib.h"
 
-#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
-
-/* XXX: would it be faster to unroll literally everything instead of defining everything,
- * and then unpacking it all? */
-static const char *header =
-	"/**\n"
-	" * vec - a tiny SIMD vector library in C99\n"
-	" * \n"
-	" * Copyright (c) 2024-2025 Paper\n"
-	" * \n"
-	" * Permission is hereby granted, free of charge, to any person obtaining a copy\n"
-	" * of this software and associated documentation files (the \"Software\"), to deal\n"
-	" * in the Software without restriction, including without limitation the rights\n"
-	" * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
-	" * copies of the Software, and to permit persons to whom the Software is\n"
-	" * furnished to do so, subject to the following conditions:\n"
-	" * \n"
-	" * The above copyright notice and this permission notice shall be included in all\n"
-	" * copies or substantial portions of the Software.\n"
-	" * \n"
-	" * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
-	" * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
-	" * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"
-	" * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
-	" * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
-	" * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n"
-	" * SOFTWARE.\n"
-	"**/\n"
-	"\n"
-	"/* This file is automatically generated! Do not edit it directly!\n"
-	" * Edit the code that generates it in utils/gendbl.c  --paper */\n"
-	"\n"
-	"#ifndef VEC_IMPL_DOUBLE_H_\n"
-	"#define VEC_IMPL_DOUBLE_H_\n"
-	"\n"
-	"#define VEC_DOUBLE_SPLAT(sign, bits, size, halfsize) \\\n"
-	"	VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_splat(vec_##sign##int##bits x) \\\n"
-	"	{ \\\n"
-	"		v##sign##int##bits##x##size vec; \\\n"
-	"	\\\n"
-	"		vec.dbl[0] = v##sign##int##bits##x##halfsize##_splat(x); \\\n"
-	"		vec.dbl[1] = v##sign##int##bits##x##halfsize##_splat(x); \\\n"
-	"	\\\n"
-	"		return vec; \\\n"
-	"	}\n"
-	"\n"
-	"#define VEC_DOUBLE_LOAD_EX(name, sign, bits, size, halfsize) \\\n"
-	"	VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_##name(const vec_##sign##int##bits x[size]) \\\n"
-	"	{ \\\n"
-	"		v##sign##int##bits##x##size vec; \\\n"
-	"	\\\n"
-	"		vec.dbl[0] = v##sign##int##bits##x##halfsize##_##name(x); \\\n"
-	"		vec.dbl[1] = v##sign##int##bits##x##halfsize##_##name(x + halfsize); \\\n"
-	"	\\\n"
-	"		return vec; \\\n"
-	"	}\n"
-	"\n"
-	"#define VEC_DOUBLE_LOAD(sign, bits, size, halfsize) VEC_DOUBLE_LOAD_EX(load, sign, bits, size, halfsize)\n"
-	"#define VEC_DOUBLE_LOAD_ALIGNED(sign, bits, size, halfsize) VEC_DOUBLE_LOAD_EX(load_aligned, sign, bits, size, halfsize)\n"
-	"\n"
-	"#define VEC_DOUBLE_STORE_EX(name, sign, bits, size, halfsize) \\\n"
-	"	VEC_FUNC_IMPL void v##sign##int##bits##x##size##_##name(v##sign##int##bits##x##size vec, vec_##sign##int##bits x[size]) \\\n"
-	"	{ \\\n"
-	"		v##sign##int##bits##x##halfsize##_##name(vec.dbl[0], x); \\\n"
-	"		v##sign##int##bits##x##halfsize##_##name(vec.dbl[1], x + halfsize); \\\n"
-	"	}\n"
-	"\n"
-	"#define VEC_DOUBLE_STORE(sign, bits, size, halfsize) VEC_DOUBLE_STORE_EX(store, sign, bits, size, halfsize)\n"
-	"#define VEC_DOUBLE_STORE_ALIGNED(sign, bits, size, halfsize) VEC_DOUBLE_STORE_EX(store_aligned, sign, bits, size, halfsize)\n"
-	"\n"
-	"#define VEC_DOUBLE_OP(name, sign, bits, size, halfsize, secondsign) \\\n"
-	"	VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_##name(v##sign##int##bits##x##size vec1, v##secondsign##int##bits##x##size vec2) \\\n"
-	"	{ \\\n"
-	"		vec1.dbl[0] = v##sign##int##bits##x##halfsize##_##name(vec1.dbl[0], vec2.dbl[0]); \\\n"
-	"		vec1.dbl[1] = v##sign##int##bits##x##halfsize##_##name(vec1.dbl[1], vec2.dbl[1]); \\\n"
-	"	\\\n"
-	"		return vec1; \\\n"
-	"	}\n"
-	"\n"
-	"#define VEC_DOUBLE_ADD(sign, bits, size, halfsize) VEC_DOUBLE_OP(add, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_SUB(sign, bits, size, halfsize) VEC_DOUBLE_OP(sub, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_MUL(sign, bits, size, halfsize) VEC_DOUBLE_OP(mul, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_DIV(sign, bits, size, halfsize) VEC_DOUBLE_OP(div, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_MOD(sign, bits, size, halfsize) VEC_DOUBLE_OP(mod, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_AVG(sign, bits, size, halfsize) VEC_DOUBLE_OP(avg, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_LSHIFT(sign, bits, size, halfsize) VEC_DOUBLE_OP(lshift, sign, bits, size, halfsize, u)\n"
-	"#define VEC_DOUBLE_RSHIFT(sign, bits, size, halfsize) VEC_DOUBLE_OP(rshift, sign, bits, size, halfsize, u)\n"
-	"#define VEC_DOUBLE_LRSHIFT(sign, bits, size, halfsize) VEC_DOUBLE_OP(lrshift, sign, bits, size, halfsize, u)\n"
-	"#define VEC_DOUBLE_AND(sign, bits, size, halfsize) VEC_DOUBLE_OP(and, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_OR(sign, bits, size, halfsize) VEC_DOUBLE_OP(or, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_XOR(sign, bits, size, halfsize) VEC_DOUBLE_OP(xor, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_MIN(sign, bits, size, halfsize) VEC_DOUBLE_OP(min, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_MAX(sign, bits, size, halfsize) VEC_DOUBLE_OP(max, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_CMPLT(sign, bits, size, halfsize) VEC_DOUBLE_OP(cmplt, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_CMPLE(sign, bits, size, halfsize) VEC_DOUBLE_OP(cmple, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_CMPEQ(sign, bits, size, halfsize) VEC_DOUBLE_OP(cmpeq, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_CMPGE(sign, bits, size, halfsize) VEC_DOUBLE_OP(cmpge, sign, bits, size, halfsize, sign)\n"
-	"#define VEC_DOUBLE_CMPGT(sign, bits, size, halfsize) VEC_DOUBLE_OP(cmpgt, sign, bits, size, halfsize, sign)\n"
-	"\n"
-	"#define VEC_DOUBLE_NOT(sign, bits, size, halfsize) \\\n"
-	"	VEC_FUNC_IMPL v##sign##int##bits##x##size v##sign##int##bits##x##size##_not(v##sign##int##bits##x##size vec) \\\n"
-	"	{ \\\n"
-	"		vec.dbl[0] = v##sign##int##bits##x##halfsize##_not(vec.dbl[0]); \\\n"
-	"		vec.dbl[1] = v##sign##int##bits##x##halfsize##_not(vec.dbl[1]); \\\n"
-	"	\\\n"
-	"		return vec; \\\n"
-	"	}\n"
-	"\n"
-	"#endif /* VEC_IMPL_DOUBLE_H_ */ \n"
-	"\n"
-	"/* ------------------------------------------------------------------------ */\n"
-	"/* PREPROCESSOR HELL INCOMING */\n"
-	"";
-
-static const char *footer = 
-	"" /* nothing */;
-
 /* ------------------------------------------------------------------------ */
 
 static void op_print_pp_halfsize(int op, int type, int bits, int size)
@@ -173,7 +56,7 @@
 	gen_print_vtype(type, bits, size / 2);
 	printf("_%s(vec.dbl[0]);\n", op_info->l);
 
-	printf("\tvec1.dbl[1] = ");
+	printf("\tvec.dbl[1] = ");
 	gen_print_vtype(type, bits, size / 2);
 	printf("_%s(vec.dbl[1]);\n", op_info->l);
 
@@ -267,6 +150,11 @@
 	[OP_CMPEQ] = {NULL, op_print_pp_halfsize, op_print_twoop},
 	[OP_CMPGE] = {NULL, op_print_pp_halfsize, op_print_twoop},
 	[OP_CMPGT] = {NULL, op_print_pp_halfsize, op_print_twoop},
+
+	[OP_FLOOR] = {NULL, op_print_pp_halfsize, op_print_unoop},
+	[OP_CEIL]  = {NULL, op_print_pp_halfsize, op_print_unoop},
+	[OP_ROUND] = {NULL, op_print_pp_halfsize, op_print_unoop},
+	[OP_TRUNC] = {NULL, op_print_pp_halfsize, op_print_unoop},
 };
 
 int main(void)
--- a/gen/gengeneric.c	Wed Apr 30 18:36:38 2025 -0400
+++ b/gen/gengeneric.c	Sat Aug 09 15:55:59 2025 -0400
@@ -130,6 +130,7 @@
 			break;
 		}
 		case OP_RSHIFT:
+			/* ehhhh this feels weird ... */
 			for (i = 0; i < size; i++)
 				printf("vec1.generic[%d] = ((~vec1.generic[%d]) >> vec2.generic[%d]);\n", i, i, i);
 			break;
@@ -151,7 +152,7 @@
 
 	if (op == OP_MOD && type == TYPE_FLOAT) {
 		for (i = 0; i < size; i++)
-			printf("\tvec1.generic[%d] = (vec2.generic[%d] ? fmod(vec1.generic[%d], vec2.generic[%d]) : 0);\n", i, i, i, i);
+			printf("\tvec1.generic[%d] = (vec2.generic[%d] ? fmod%s(vec1.generic[%d], vec2.generic[%d]) : 0);\n", i, i, (bits == 32) ? "f" : "", i, i);
 	} else {
 		for (i = 0; i < size; i++)
 			printf("\tvec1.generic[%d] = (vec2.generic[%d] ? (vec1.generic[%d] %s vec2.generic[%d]) : 0);\n", i, i, i, ops[op], i);
@@ -226,6 +227,22 @@
 	printf("\tmemcpy(x, vec.generic, %d);\n", (bits / 8) * size);
 }
 
+static void op_fmath_pbody(int op, int type, int bits, int size)
+{
+	static const char *ops[OP_FINAL_] = {
+		[OP_FLOOR] = "floor",
+		[OP_CEIL]  = "ceil",
+		[OP_ROUND] = "round",
+		[OP_TRUNC] = "trunc",
+	};
+	int i;
+
+	for (i = 0; i < size; i++)
+		printf("\tvec.generic[%d] = %s%s(vec.generic[%d]);\n", i, ops[op], (bits == 32) ? "f" : "", i);
+
+	puts("\treturn vec;");
+}
+
 /* ------------------------------------------------------------------------ */
 
 static struct op_impl op_impl[OP_FINAL_] = {
@@ -264,6 +281,11 @@
 	[OP_CMPEQ] = {NULL, NULL, op_cmp_pbody},
 	[OP_CMPGE] = {NULL, NULL, op_cmp_pbody},
 	[OP_CMPGT] = {NULL, NULL, op_cmp_pbody},
+
+	[OP_FLOOR] = {NULL, NULL, op_fmath_pbody},
+	[OP_ROUND] = {NULL, NULL, op_fmath_pbody},
+	[OP_CEIL]  = {NULL, NULL, op_fmath_pbody},
+	[OP_TRUNC] = {NULL, NULL, op_fmath_pbody},
 };
 
 int main(void)
--- a/gen/genlib.c	Wed Apr 30 18:36:38 2025 -0400
+++ b/gen/genlib.c	Sat Aug 09 15:55:59 2025 -0400
@@ -111,7 +111,7 @@
 	(void)op;
 }
 
-struct op_info ops[] = {
+struct op_info ops[OP_FINAL_] = {
 	[OP_SPLAT] = {"SPLAT", "splat", vret, vsplatparam},
 	[OP_LOAD_ALIGNED] = {"LOAD_ALIGNED", "load_aligned", vret, vloadparam},
 	[OP_LOAD] = {"LOAD", "load", vret, vloadparam},
@@ -137,6 +137,12 @@
 	[OP_RSHIFT] = {"RSHIFT", "rshift", vret, vshiftparam},
 	[OP_LRSHIFT] = {"LRSHIFT", "lrshift", vret, vshiftparam},
 	[OP_LSHIFT] = {"LSHIFT", "lshift", vret, vshiftparam},
+
+	/* floating-point specific operations */
+	[OP_FLOOR] = {"FLOOR", "floor", vret, voneparam},
+	[OP_CEIL]  = {"CEIL",  "ceil",  vret, voneparam},
+	[OP_ROUND] = {"ROUND", "round", vret, voneparam},
+	[OP_TRUNC] = {"TRUNC", "trunc", vret, voneparam},
 };
 
 struct op_info *gen_op_info(int op)
@@ -168,13 +174,18 @@
 		if (type == TYPE_FLOAT)
 			return 0;
 		break;
+	case OP_FLOOR:
+	case OP_CEIL:
+	case OP_ROUND:
+		/* likewise, these operations make no sense for integer types */
+		if (type != TYPE_FLOAT)
+			return 0;
+		break;
 	}
 
 	return 1;
 }
 
-/* XXX: would it be faster to unroll literally everything instead of defining everything,
- * and then unpacking it all? */
 static const char *header_tmpl =
 	"/**\n"
 	" * vec - a tiny SIMD vector library in C99\n"
--- a/gen/genlib.h	Wed Apr 30 18:36:38 2025 -0400
+++ b/gen/genlib.h	Sat Aug 09 15:55:59 2025 -0400
@@ -53,6 +53,11 @@
 	OP_LRSHIFT,
 	OP_LSHIFT,
 
+	OP_FLOOR,
+	OP_CEIL,
+	OP_ROUND,
+	OP_TRUNC,
+
 	/* use this for array sizes and the like */
 	OP_FINAL_,
 };
--- a/include/vec/impl/double.h	Wed Apr 30 18:36:38 2025 -0400
+++ b/include/vec/impl/double.h	Sat Aug 09 15:55:59 2025 -0400
@@ -174,7 +174,7 @@
 VEC_FUNC_IMPL vint8x2 vint8x2_not(vint8x2 vec)
 {
 	vec.dbl[0] = vint8x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x1_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x2_NOT_DEFINED
@@ -279,6 +279,16 @@
 }
 # define VINT8x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x2_TRUNC_DEFINED) \
+	 && (defined(VINT8x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x2 vint8x2_trunc(vint8x2 vec)
+{
+	vec.dbl[0] = vint8x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x2_SPLAT_DEFINED) \
 	 && (defined(VUINT8x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x2 vuint8x2_splat(vec_uint8 x)
@@ -425,7 +435,7 @@
 VEC_FUNC_IMPL vuint8x2 vuint8x2_not(vuint8x2 vec)
 {
 	vec.dbl[0] = vuint8x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x1_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x2_NOT_DEFINED
@@ -530,6 +540,16 @@
 }
 # define VUINT8x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x2_TRUNC_DEFINED) \
+	 && (defined(VUINT8x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x2 vuint8x2_trunc(vuint8x2 vec)
+{
+	vec.dbl[0] = vuint8x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x4_SPLAT_DEFINED) \
 	 && (defined(VINT8x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint8x4 vint8x4_splat(vec_int8 x)
@@ -676,7 +696,7 @@
 VEC_FUNC_IMPL vint8x4 vint8x4_not(vint8x4 vec)
 {
 	vec.dbl[0] = vint8x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x2_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x4_NOT_DEFINED
@@ -781,6 +801,16 @@
 }
 # define VINT8x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x4_TRUNC_DEFINED) \
+	 && (defined(VINT8x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x4 vint8x4_trunc(vint8x4 vec)
+{
+	vec.dbl[0] = vint8x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x4_SPLAT_DEFINED) \
 	 && (defined(VUINT8x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x4 vuint8x4_splat(vec_uint8 x)
@@ -927,7 +957,7 @@
 VEC_FUNC_IMPL vuint8x4 vuint8x4_not(vuint8x4 vec)
 {
 	vec.dbl[0] = vuint8x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x2_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x4_NOT_DEFINED
@@ -1032,6 +1062,16 @@
 }
 # define VUINT8x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x4_TRUNC_DEFINED) \
+	 && (defined(VUINT8x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x4 vuint8x4_trunc(vuint8x4 vec)
+{
+	vec.dbl[0] = vuint8x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x8_SPLAT_DEFINED) \
 	 && (defined(VINT8x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint8x8 vint8x8_splat(vec_int8 x)
@@ -1178,7 +1218,7 @@
 VEC_FUNC_IMPL vint8x8 vint8x8_not(vint8x8 vec)
 {
 	vec.dbl[0] = vint8x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x4_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x8_NOT_DEFINED
@@ -1283,6 +1323,16 @@
 }
 # define VINT8x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x8_TRUNC_DEFINED) \
+	 && (defined(VINT8x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x8 vint8x8_trunc(vint8x8 vec)
+{
+	vec.dbl[0] = vint8x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x8_SPLAT_DEFINED) \
 	 && (defined(VUINT8x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x8 vuint8x8_splat(vec_uint8 x)
@@ -1429,7 +1479,7 @@
 VEC_FUNC_IMPL vuint8x8 vuint8x8_not(vuint8x8 vec)
 {
 	vec.dbl[0] = vuint8x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x4_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x8_NOT_DEFINED
@@ -1534,6 +1584,16 @@
 }
 # define VUINT8x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x8_TRUNC_DEFINED) \
+	 && (defined(VUINT8x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x8 vuint8x8_trunc(vuint8x8 vec)
+{
+	vec.dbl[0] = vuint8x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x16_SPLAT_DEFINED) \
 	 && (defined(VINT8x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint8x16 vint8x16_splat(vec_int8 x)
@@ -1680,7 +1740,7 @@
 VEC_FUNC_IMPL vint8x16 vint8x16_not(vint8x16 vec)
 {
 	vec.dbl[0] = vint8x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x8_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x16_NOT_DEFINED
@@ -1785,6 +1845,16 @@
 }
 # define VINT8x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x16_TRUNC_DEFINED) \
+	 && (defined(VINT8x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x16 vint8x16_trunc(vint8x16 vec)
+{
+	vec.dbl[0] = vint8x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x16_SPLAT_DEFINED) \
 	 && (defined(VUINT8x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x16 vuint8x16_splat(vec_uint8 x)
@@ -1931,7 +2001,7 @@
 VEC_FUNC_IMPL vuint8x16 vuint8x16_not(vuint8x16 vec)
 {
 	vec.dbl[0] = vuint8x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x8_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x16_NOT_DEFINED
@@ -2036,6 +2106,16 @@
 }
 # define VUINT8x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x16_TRUNC_DEFINED) \
+	 && (defined(VUINT8x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x16 vuint8x16_trunc(vuint8x16 vec)
+{
+	vec.dbl[0] = vuint8x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x32_SPLAT_DEFINED) \
 	 && (defined(VINT8x16_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint8x32 vint8x32_splat(vec_int8 x)
@@ -2182,7 +2262,7 @@
 VEC_FUNC_IMPL vint8x32 vint8x32_not(vint8x32 vec)
 {
 	vec.dbl[0] = vint8x16_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x16_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x16_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x32_NOT_DEFINED
@@ -2287,6 +2367,16 @@
 }
 # define VINT8x32_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x32_TRUNC_DEFINED) \
+	 && (defined(VINT8x16_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x32 vint8x32_trunc(vint8x32 vec)
+{
+	vec.dbl[0] = vint8x16_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x16_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x32_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x32_SPLAT_DEFINED) \
 	 && (defined(VUINT8x16_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x32 vuint8x32_splat(vec_uint8 x)
@@ -2433,7 +2523,7 @@
 VEC_FUNC_IMPL vuint8x32 vuint8x32_not(vuint8x32 vec)
 {
 	vec.dbl[0] = vuint8x16_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x16_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x16_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x32_NOT_DEFINED
@@ -2538,6 +2628,16 @@
 }
 # define VUINT8x32_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x32_TRUNC_DEFINED) \
+	 && (defined(VUINT8x16_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x32 vuint8x32_trunc(vuint8x32 vec)
+{
+	vec.dbl[0] = vuint8x16_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x16_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x32_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x64_SPLAT_DEFINED) \
 	 && (defined(VINT8x32_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint8x64 vint8x64_splat(vec_int8 x)
@@ -2684,7 +2784,7 @@
 VEC_FUNC_IMPL vint8x64 vint8x64_not(vint8x64 vec)
 {
 	vec.dbl[0] = vint8x32_not(vec.dbl[0]);
-	vec1.dbl[1] = vint8x32_not(vec.dbl[1]);
+	vec.dbl[1] = vint8x32_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT8x64_NOT_DEFINED
@@ -2789,6 +2889,16 @@
 }
 # define VINT8x64_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x64_TRUNC_DEFINED) \
+	 && (defined(VINT8x32_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint8x64 vint8x64_trunc(vint8x64 vec)
+{
+	vec.dbl[0] = vint8x32_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint8x32_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT8x64_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x64_SPLAT_DEFINED) \
 	 && (defined(VUINT8x32_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint8x64 vuint8x64_splat(vec_uint8 x)
@@ -2935,7 +3045,7 @@
 VEC_FUNC_IMPL vuint8x64 vuint8x64_not(vuint8x64 vec)
 {
 	vec.dbl[0] = vuint8x32_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint8x32_not(vec.dbl[1]);
+	vec.dbl[1] = vuint8x32_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT8x64_NOT_DEFINED
@@ -3040,6 +3150,16 @@
 }
 # define VUINT8x64_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x64_TRUNC_DEFINED) \
+	 && (defined(VUINT8x32_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint8x64 vuint8x64_trunc(vuint8x64 vec)
+{
+	vec.dbl[0] = vuint8x32_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint8x32_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT8x64_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x2_SPLAT_DEFINED) \
 	 && (defined(VINT16x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint16x2 vint16x2_splat(vec_int16 x)
@@ -3186,7 +3306,7 @@
 VEC_FUNC_IMPL vint16x2 vint16x2_not(vint16x2 vec)
 {
 	vec.dbl[0] = vint16x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vint16x1_not(vec.dbl[1]);
+	vec.dbl[1] = vint16x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT16x2_NOT_DEFINED
@@ -3291,6 +3411,16 @@
 }
 # define VINT16x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x2_TRUNC_DEFINED) \
+	 && (defined(VINT16x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint16x2 vint16x2_trunc(vint16x2 vec)
+{
+	vec.dbl[0] = vint16x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint16x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT16x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x2_SPLAT_DEFINED) \
 	 && (defined(VUINT16x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint16x2 vuint16x2_splat(vec_uint16 x)
@@ -3437,7 +3567,7 @@
 VEC_FUNC_IMPL vuint16x2 vuint16x2_not(vuint16x2 vec)
 {
 	vec.dbl[0] = vuint16x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint16x1_not(vec.dbl[1]);
+	vec.dbl[1] = vuint16x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT16x2_NOT_DEFINED
@@ -3542,6 +3672,16 @@
 }
 # define VUINT16x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x2_TRUNC_DEFINED) \
+	 && (defined(VUINT16x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint16x2 vuint16x2_trunc(vuint16x2 vec)
+{
+	vec.dbl[0] = vuint16x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint16x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT16x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x4_SPLAT_DEFINED) \
 	 && (defined(VINT16x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint16x4 vint16x4_splat(vec_int16 x)
@@ -3688,7 +3828,7 @@
 VEC_FUNC_IMPL vint16x4 vint16x4_not(vint16x4 vec)
 {
 	vec.dbl[0] = vint16x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vint16x2_not(vec.dbl[1]);
+	vec.dbl[1] = vint16x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT16x4_NOT_DEFINED
@@ -3793,6 +3933,16 @@
 }
 # define VINT16x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x4_TRUNC_DEFINED) \
+	 && (defined(VINT16x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint16x4 vint16x4_trunc(vint16x4 vec)
+{
+	vec.dbl[0] = vint16x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint16x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT16x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x4_SPLAT_DEFINED) \
 	 && (defined(VUINT16x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint16x4 vuint16x4_splat(vec_uint16 x)
@@ -3939,7 +4089,7 @@
 VEC_FUNC_IMPL vuint16x4 vuint16x4_not(vuint16x4 vec)
 {
 	vec.dbl[0] = vuint16x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint16x2_not(vec.dbl[1]);
+	vec.dbl[1] = vuint16x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT16x4_NOT_DEFINED
@@ -4044,6 +4194,16 @@
 }
 # define VUINT16x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x4_TRUNC_DEFINED) \
+	 && (defined(VUINT16x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint16x4 vuint16x4_trunc(vuint16x4 vec)
+{
+	vec.dbl[0] = vuint16x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint16x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT16x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x8_SPLAT_DEFINED) \
 	 && (defined(VINT16x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint16x8 vint16x8_splat(vec_int16 x)
@@ -4190,7 +4350,7 @@
 VEC_FUNC_IMPL vint16x8 vint16x8_not(vint16x8 vec)
 {
 	vec.dbl[0] = vint16x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vint16x4_not(vec.dbl[1]);
+	vec.dbl[1] = vint16x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT16x8_NOT_DEFINED
@@ -4295,6 +4455,16 @@
 }
 # define VINT16x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x8_TRUNC_DEFINED) \
+	 && (defined(VINT16x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint16x8 vint16x8_trunc(vint16x8 vec)
+{
+	vec.dbl[0] = vint16x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint16x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT16x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x8_SPLAT_DEFINED) \
 	 && (defined(VUINT16x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint16x8 vuint16x8_splat(vec_uint16 x)
@@ -4441,7 +4611,7 @@
 VEC_FUNC_IMPL vuint16x8 vuint16x8_not(vuint16x8 vec)
 {
 	vec.dbl[0] = vuint16x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint16x4_not(vec.dbl[1]);
+	vec.dbl[1] = vuint16x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT16x8_NOT_DEFINED
@@ -4546,6 +4716,16 @@
 }
 # define VUINT16x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x8_TRUNC_DEFINED) \
+	 && (defined(VUINT16x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint16x8 vuint16x8_trunc(vuint16x8 vec)
+{
+	vec.dbl[0] = vuint16x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint16x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT16x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x16_SPLAT_DEFINED) \
 	 && (defined(VINT16x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint16x16 vint16x16_splat(vec_int16 x)
@@ -4692,7 +4872,7 @@
 VEC_FUNC_IMPL vint16x16 vint16x16_not(vint16x16 vec)
 {
 	vec.dbl[0] = vint16x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vint16x8_not(vec.dbl[1]);
+	vec.dbl[1] = vint16x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT16x16_NOT_DEFINED
@@ -4797,6 +4977,16 @@
 }
 # define VINT16x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x16_TRUNC_DEFINED) \
+	 && (defined(VINT16x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint16x16 vint16x16_trunc(vint16x16 vec)
+{
+	vec.dbl[0] = vint16x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint16x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT16x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x16_SPLAT_DEFINED) \
 	 && (defined(VUINT16x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint16x16 vuint16x16_splat(vec_uint16 x)
@@ -4943,7 +5133,7 @@
 VEC_FUNC_IMPL vuint16x16 vuint16x16_not(vuint16x16 vec)
 {
 	vec.dbl[0] = vuint16x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint16x8_not(vec.dbl[1]);
+	vec.dbl[1] = vuint16x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT16x16_NOT_DEFINED
@@ -5048,6 +5238,16 @@
 }
 # define VUINT16x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x16_TRUNC_DEFINED) \
+	 && (defined(VUINT16x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint16x16 vuint16x16_trunc(vuint16x16 vec)
+{
+	vec.dbl[0] = vuint16x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint16x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT16x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x32_SPLAT_DEFINED) \
 	 && (defined(VINT16x16_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint16x32 vint16x32_splat(vec_int16 x)
@@ -5194,7 +5394,7 @@
 VEC_FUNC_IMPL vint16x32 vint16x32_not(vint16x32 vec)
 {
 	vec.dbl[0] = vint16x16_not(vec.dbl[0]);
-	vec1.dbl[1] = vint16x16_not(vec.dbl[1]);
+	vec.dbl[1] = vint16x16_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT16x32_NOT_DEFINED
@@ -5299,6 +5499,16 @@
 }
 # define VINT16x32_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x32_TRUNC_DEFINED) \
+	 && (defined(VINT16x16_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint16x32 vint16x32_trunc(vint16x32 vec)
+{
+	vec.dbl[0] = vint16x16_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint16x16_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT16x32_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x32_SPLAT_DEFINED) \
 	 && (defined(VUINT16x16_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint16x32 vuint16x32_splat(vec_uint16 x)
@@ -5445,7 +5655,7 @@
 VEC_FUNC_IMPL vuint16x32 vuint16x32_not(vuint16x32 vec)
 {
 	vec.dbl[0] = vuint16x16_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint16x16_not(vec.dbl[1]);
+	vec.dbl[1] = vuint16x16_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT16x32_NOT_DEFINED
@@ -5550,6 +5760,16 @@
 }
 # define VUINT16x32_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x32_TRUNC_DEFINED) \
+	 && (defined(VUINT16x16_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint16x32 vuint16x32_trunc(vuint16x32 vec)
+{
+	vec.dbl[0] = vuint16x16_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint16x16_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT16x32_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x2_SPLAT_DEFINED) \
 	 && (defined(VINT32x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint32x2 vint32x2_splat(vec_int32 x)
@@ -5696,7 +5916,7 @@
 VEC_FUNC_IMPL vint32x2 vint32x2_not(vint32x2 vec)
 {
 	vec.dbl[0] = vint32x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vint32x1_not(vec.dbl[1]);
+	vec.dbl[1] = vint32x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT32x2_NOT_DEFINED
@@ -5801,6 +6021,16 @@
 }
 # define VINT32x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x2_TRUNC_DEFINED) \
+	 && (defined(VINT32x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint32x2 vint32x2_trunc(vint32x2 vec)
+{
+	vec.dbl[0] = vint32x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint32x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT32x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x2_SPLAT_DEFINED) \
 	 && (defined(VUINT32x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint32x2 vuint32x2_splat(vec_uint32 x)
@@ -5947,7 +6177,7 @@
 VEC_FUNC_IMPL vuint32x2 vuint32x2_not(vuint32x2 vec)
 {
 	vec.dbl[0] = vuint32x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint32x1_not(vec.dbl[1]);
+	vec.dbl[1] = vuint32x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT32x2_NOT_DEFINED
@@ -6052,6 +6282,16 @@
 }
 # define VUINT32x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x2_TRUNC_DEFINED) \
+	 && (defined(VUINT32x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint32x2 vuint32x2_trunc(vuint32x2 vec)
+{
+	vec.dbl[0] = vuint32x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint32x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT32x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x4_SPLAT_DEFINED) \
 	 && (defined(VINT32x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint32x4 vint32x4_splat(vec_int32 x)
@@ -6198,7 +6438,7 @@
 VEC_FUNC_IMPL vint32x4 vint32x4_not(vint32x4 vec)
 {
 	vec.dbl[0] = vint32x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vint32x2_not(vec.dbl[1]);
+	vec.dbl[1] = vint32x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT32x4_NOT_DEFINED
@@ -6303,6 +6543,16 @@
 }
 # define VINT32x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x4_TRUNC_DEFINED) \
+	 && (defined(VINT32x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint32x4 vint32x4_trunc(vint32x4 vec)
+{
+	vec.dbl[0] = vint32x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint32x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT32x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x4_SPLAT_DEFINED) \
 	 && (defined(VUINT32x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint32x4 vuint32x4_splat(vec_uint32 x)
@@ -6449,7 +6699,7 @@
 VEC_FUNC_IMPL vuint32x4 vuint32x4_not(vuint32x4 vec)
 {
 	vec.dbl[0] = vuint32x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint32x2_not(vec.dbl[1]);
+	vec.dbl[1] = vuint32x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT32x4_NOT_DEFINED
@@ -6554,6 +6804,16 @@
 }
 # define VUINT32x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x4_TRUNC_DEFINED) \
+	 && (defined(VUINT32x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint32x4 vuint32x4_trunc(vuint32x4 vec)
+{
+	vec.dbl[0] = vuint32x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint32x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT32x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x8_SPLAT_DEFINED) \
 	 && (defined(VINT32x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint32x8 vint32x8_splat(vec_int32 x)
@@ -6700,7 +6960,7 @@
 VEC_FUNC_IMPL vint32x8 vint32x8_not(vint32x8 vec)
 {
 	vec.dbl[0] = vint32x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vint32x4_not(vec.dbl[1]);
+	vec.dbl[1] = vint32x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT32x8_NOT_DEFINED
@@ -6805,6 +7065,16 @@
 }
 # define VINT32x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x8_TRUNC_DEFINED) \
+	 && (defined(VINT32x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint32x8 vint32x8_trunc(vint32x8 vec)
+{
+	vec.dbl[0] = vint32x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint32x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT32x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x8_SPLAT_DEFINED) \
 	 && (defined(VUINT32x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint32x8 vuint32x8_splat(vec_uint32 x)
@@ -6951,7 +7221,7 @@
 VEC_FUNC_IMPL vuint32x8 vuint32x8_not(vuint32x8 vec)
 {
 	vec.dbl[0] = vuint32x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint32x4_not(vec.dbl[1]);
+	vec.dbl[1] = vuint32x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT32x8_NOT_DEFINED
@@ -7056,6 +7326,16 @@
 }
 # define VUINT32x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x8_TRUNC_DEFINED) \
+	 && (defined(VUINT32x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint32x8 vuint32x8_trunc(vuint32x8 vec)
+{
+	vec.dbl[0] = vuint32x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint32x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT32x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x16_SPLAT_DEFINED) \
 	 && (defined(VINT32x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint32x16 vint32x16_splat(vec_int32 x)
@@ -7202,7 +7482,7 @@
 VEC_FUNC_IMPL vint32x16 vint32x16_not(vint32x16 vec)
 {
 	vec.dbl[0] = vint32x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vint32x8_not(vec.dbl[1]);
+	vec.dbl[1] = vint32x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT32x16_NOT_DEFINED
@@ -7307,6 +7587,16 @@
 }
 # define VINT32x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x16_TRUNC_DEFINED) \
+	 && (defined(VINT32x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint32x16 vint32x16_trunc(vint32x16 vec)
+{
+	vec.dbl[0] = vint32x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint32x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT32x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x16_SPLAT_DEFINED) \
 	 && (defined(VUINT32x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint32x16 vuint32x16_splat(vec_uint32 x)
@@ -7453,7 +7743,7 @@
 VEC_FUNC_IMPL vuint32x16 vuint32x16_not(vuint32x16 vec)
 {
 	vec.dbl[0] = vuint32x8_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint32x8_not(vec.dbl[1]);
+	vec.dbl[1] = vuint32x8_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT32x16_NOT_DEFINED
@@ -7558,6 +7848,16 @@
 }
 # define VUINT32x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x16_TRUNC_DEFINED) \
+	 && (defined(VUINT32x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint32x16 vuint32x16_trunc(vuint32x16 vec)
+{
+	vec.dbl[0] = vuint32x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint32x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT32x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x2_SPLAT_DEFINED) \
 	 && (defined(VINT64x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint64x2 vint64x2_splat(vec_int64 x)
@@ -7704,7 +8004,7 @@
 VEC_FUNC_IMPL vint64x2 vint64x2_not(vint64x2 vec)
 {
 	vec.dbl[0] = vint64x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vint64x1_not(vec.dbl[1]);
+	vec.dbl[1] = vint64x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT64x2_NOT_DEFINED
@@ -7809,6 +8109,16 @@
 }
 # define VINT64x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x2_TRUNC_DEFINED) \
+	 && (defined(VINT64x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint64x2 vint64x2_trunc(vint64x2 vec)
+{
+	vec.dbl[0] = vint64x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint64x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT64x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x2_SPLAT_DEFINED) \
 	 && (defined(VUINT64x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint64x2 vuint64x2_splat(vec_uint64 x)
@@ -7955,7 +8265,7 @@
 VEC_FUNC_IMPL vuint64x2 vuint64x2_not(vuint64x2 vec)
 {
 	vec.dbl[0] = vuint64x1_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint64x1_not(vec.dbl[1]);
+	vec.dbl[1] = vuint64x1_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT64x2_NOT_DEFINED
@@ -8060,6 +8370,16 @@
 }
 # define VUINT64x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x2_TRUNC_DEFINED) \
+	 && (defined(VUINT64x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint64x2 vuint64x2_trunc(vuint64x2 vec)
+{
+	vec.dbl[0] = vuint64x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint64x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT64x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x4_SPLAT_DEFINED) \
 	 && (defined(VINT64x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint64x4 vint64x4_splat(vec_int64 x)
@@ -8206,7 +8526,7 @@
 VEC_FUNC_IMPL vint64x4 vint64x4_not(vint64x4 vec)
 {
 	vec.dbl[0] = vint64x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vint64x2_not(vec.dbl[1]);
+	vec.dbl[1] = vint64x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT64x4_NOT_DEFINED
@@ -8311,6 +8631,16 @@
 }
 # define VINT64x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x4_TRUNC_DEFINED) \
+	 && (defined(VINT64x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint64x4 vint64x4_trunc(vint64x4 vec)
+{
+	vec.dbl[0] = vint64x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint64x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT64x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x4_SPLAT_DEFINED) \
 	 && (defined(VUINT64x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint64x4 vuint64x4_splat(vec_uint64 x)
@@ -8457,7 +8787,7 @@
 VEC_FUNC_IMPL vuint64x4 vuint64x4_not(vuint64x4 vec)
 {
 	vec.dbl[0] = vuint64x2_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint64x2_not(vec.dbl[1]);
+	vec.dbl[1] = vuint64x2_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT64x4_NOT_DEFINED
@@ -8562,6 +8892,16 @@
 }
 # define VUINT64x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x4_TRUNC_DEFINED) \
+	 && (defined(VUINT64x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint64x4 vuint64x4_trunc(vuint64x4 vec)
+{
+	vec.dbl[0] = vuint64x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint64x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT64x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x8_SPLAT_DEFINED) \
 	 && (defined(VINT64x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vint64x8 vint64x8_splat(vec_int64 x)
@@ -8708,7 +9048,7 @@
 VEC_FUNC_IMPL vint64x8 vint64x8_not(vint64x8 vec)
 {
 	vec.dbl[0] = vint64x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vint64x4_not(vec.dbl[1]);
+	vec.dbl[1] = vint64x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VINT64x8_NOT_DEFINED
@@ -8813,6 +9153,16 @@
 }
 # define VINT64x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x8_TRUNC_DEFINED) \
+	 && (defined(VINT64x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vint64x8 vint64x8_trunc(vint64x8 vec)
+{
+	vec.dbl[0] = vint64x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vint64x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VINT64x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x8_SPLAT_DEFINED) \
 	 && (defined(VUINT64x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vuint64x8 vuint64x8_splat(vec_uint64 x)
@@ -8959,7 +9309,7 @@
 VEC_FUNC_IMPL vuint64x8 vuint64x8_not(vuint64x8 vec)
 {
 	vec.dbl[0] = vuint64x4_not(vec.dbl[0]);
-	vec1.dbl[1] = vuint64x4_not(vec.dbl[1]);
+	vec.dbl[1] = vuint64x4_not(vec.dbl[1]);
 	return vec;
 }
 # define VUINT64x8_NOT_DEFINED
@@ -9064,6 +9414,16 @@
 }
 # define VUINT64x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x8_TRUNC_DEFINED) \
+	 && (defined(VUINT64x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vuint64x8 vuint64x8_trunc(vuint64x8 vec)
+{
+	vec.dbl[0] = vuint64x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vuint64x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VUINT64x8_TRUNC_DEFINED
+#endif
 #if !defined(VF32x2_SPLAT_DEFINED) \
 	 && (defined(VF32x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf32x2 vf32x2_splat(vec_f32 x)
@@ -9245,6 +9605,46 @@
 }
 # define VF32x2_MAX_DEFINED
 #endif
+#if !defined(VF32x2_FLOOR_DEFINED) \
+	 && (defined(VF32x1_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf32x2 vf32x2_floor(vf32x2 vec)
+{
+	vec.dbl[0] = vf32x1_floor(vec.dbl[0]);
+	vec.dbl[1] = vf32x1_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF32x2_FLOOR_DEFINED
+#endif
+#if !defined(VF32x2_CEIL_DEFINED) \
+	 && (defined(VF32x1_CEIL_DEFINED))
+VEC_FUNC_IMPL vf32x2 vf32x2_ceil(vf32x2 vec)
+{
+	vec.dbl[0] = vf32x1_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf32x1_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF32x2_CEIL_DEFINED
+#endif
+#if !defined(VF32x2_ROUND_DEFINED) \
+	 && (defined(VF32x1_ROUND_DEFINED))
+VEC_FUNC_IMPL vf32x2 vf32x2_round(vf32x2 vec)
+{
+	vec.dbl[0] = vf32x1_round(vec.dbl[0]);
+	vec.dbl[1] = vf32x1_round(vec.dbl[1]);
+	return vec;
+}
+# define VF32x2_ROUND_DEFINED
+#endif
+#if !defined(VF32x2_TRUNC_DEFINED) \
+	 && (defined(VF32x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf32x2 vf32x2_trunc(vf32x2 vec)
+{
+	vec.dbl[0] = vf32x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf32x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF32x2_TRUNC_DEFINED
+#endif
 #if !defined(VF32x4_SPLAT_DEFINED) \
 	 && (defined(VF32x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf32x4 vf32x4_splat(vec_f32 x)
@@ -9426,6 +9826,46 @@
 }
 # define VF32x4_MAX_DEFINED
 #endif
+#if !defined(VF32x4_FLOOR_DEFINED) \
+	 && (defined(VF32x2_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf32x4 vf32x4_floor(vf32x4 vec)
+{
+	vec.dbl[0] = vf32x2_floor(vec.dbl[0]);
+	vec.dbl[1] = vf32x2_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF32x4_FLOOR_DEFINED
+#endif
+#if !defined(VF32x4_CEIL_DEFINED) \
+	 && (defined(VF32x2_CEIL_DEFINED))
+VEC_FUNC_IMPL vf32x4 vf32x4_ceil(vf32x4 vec)
+{
+	vec.dbl[0] = vf32x2_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf32x2_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF32x4_CEIL_DEFINED
+#endif
+#if !defined(VF32x4_ROUND_DEFINED) \
+	 && (defined(VF32x2_ROUND_DEFINED))
+VEC_FUNC_IMPL vf32x4 vf32x4_round(vf32x4 vec)
+{
+	vec.dbl[0] = vf32x2_round(vec.dbl[0]);
+	vec.dbl[1] = vf32x2_round(vec.dbl[1]);
+	return vec;
+}
+# define VF32x4_ROUND_DEFINED
+#endif
+#if !defined(VF32x4_TRUNC_DEFINED) \
+	 && (defined(VF32x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf32x4 vf32x4_trunc(vf32x4 vec)
+{
+	vec.dbl[0] = vf32x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf32x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF32x4_TRUNC_DEFINED
+#endif
 #if !defined(VF32x8_SPLAT_DEFINED) \
 	 && (defined(VF32x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf32x8 vf32x8_splat(vec_f32 x)
@@ -9607,6 +10047,46 @@
 }
 # define VF32x8_MAX_DEFINED
 #endif
+#if !defined(VF32x8_FLOOR_DEFINED) \
+	 && (defined(VF32x4_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf32x8 vf32x8_floor(vf32x8 vec)
+{
+	vec.dbl[0] = vf32x4_floor(vec.dbl[0]);
+	vec.dbl[1] = vf32x4_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF32x8_FLOOR_DEFINED
+#endif
+#if !defined(VF32x8_CEIL_DEFINED) \
+	 && (defined(VF32x4_CEIL_DEFINED))
+VEC_FUNC_IMPL vf32x8 vf32x8_ceil(vf32x8 vec)
+{
+	vec.dbl[0] = vf32x4_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf32x4_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF32x8_CEIL_DEFINED
+#endif
+#if !defined(VF32x8_ROUND_DEFINED) \
+	 && (defined(VF32x4_ROUND_DEFINED))
+VEC_FUNC_IMPL vf32x8 vf32x8_round(vf32x8 vec)
+{
+	vec.dbl[0] = vf32x4_round(vec.dbl[0]);
+	vec.dbl[1] = vf32x4_round(vec.dbl[1]);
+	return vec;
+}
+# define VF32x8_ROUND_DEFINED
+#endif
+#if !defined(VF32x8_TRUNC_DEFINED) \
+	 && (defined(VF32x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf32x8 vf32x8_trunc(vf32x8 vec)
+{
+	vec.dbl[0] = vf32x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf32x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF32x8_TRUNC_DEFINED
+#endif
 #if !defined(VF32x16_SPLAT_DEFINED) \
 	 && (defined(VF32x8_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf32x16 vf32x16_splat(vec_f32 x)
@@ -9788,6 +10268,46 @@
 }
 # define VF32x16_MAX_DEFINED
 #endif
+#if !defined(VF32x16_FLOOR_DEFINED) \
+	 && (defined(VF32x8_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf32x16 vf32x16_floor(vf32x16 vec)
+{
+	vec.dbl[0] = vf32x8_floor(vec.dbl[0]);
+	vec.dbl[1] = vf32x8_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF32x16_FLOOR_DEFINED
+#endif
+#if !defined(VF32x16_CEIL_DEFINED) \
+	 && (defined(VF32x8_CEIL_DEFINED))
+VEC_FUNC_IMPL vf32x16 vf32x16_ceil(vf32x16 vec)
+{
+	vec.dbl[0] = vf32x8_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf32x8_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF32x16_CEIL_DEFINED
+#endif
+#if !defined(VF32x16_ROUND_DEFINED) \
+	 && (defined(VF32x8_ROUND_DEFINED))
+VEC_FUNC_IMPL vf32x16 vf32x16_round(vf32x16 vec)
+{
+	vec.dbl[0] = vf32x8_round(vec.dbl[0]);
+	vec.dbl[1] = vf32x8_round(vec.dbl[1]);
+	return vec;
+}
+# define VF32x16_ROUND_DEFINED
+#endif
+#if !defined(VF32x16_TRUNC_DEFINED) \
+	 && (defined(VF32x8_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf32x16 vf32x16_trunc(vf32x16 vec)
+{
+	vec.dbl[0] = vf32x8_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf32x8_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF32x16_TRUNC_DEFINED
+#endif
 #if !defined(VF64x2_SPLAT_DEFINED) \
 	 && (defined(VF64x1_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf64x2 vf64x2_splat(vec_f64 x)
@@ -9969,6 +10489,46 @@
 }
 # define VF64x2_MAX_DEFINED
 #endif
+#if !defined(VF64x2_FLOOR_DEFINED) \
+	 && (defined(VF64x1_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf64x2 vf64x2_floor(vf64x2 vec)
+{
+	vec.dbl[0] = vf64x1_floor(vec.dbl[0]);
+	vec.dbl[1] = vf64x1_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF64x2_FLOOR_DEFINED
+#endif
+#if !defined(VF64x2_CEIL_DEFINED) \
+	 && (defined(VF64x1_CEIL_DEFINED))
+VEC_FUNC_IMPL vf64x2 vf64x2_ceil(vf64x2 vec)
+{
+	vec.dbl[0] = vf64x1_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf64x1_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF64x2_CEIL_DEFINED
+#endif
+#if !defined(VF64x2_ROUND_DEFINED) \
+	 && (defined(VF64x1_ROUND_DEFINED))
+VEC_FUNC_IMPL vf64x2 vf64x2_round(vf64x2 vec)
+{
+	vec.dbl[0] = vf64x1_round(vec.dbl[0]);
+	vec.dbl[1] = vf64x1_round(vec.dbl[1]);
+	return vec;
+}
+# define VF64x2_ROUND_DEFINED
+#endif
+#if !defined(VF64x2_TRUNC_DEFINED) \
+	 && (defined(VF64x1_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf64x2 vf64x2_trunc(vf64x2 vec)
+{
+	vec.dbl[0] = vf64x1_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf64x1_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF64x2_TRUNC_DEFINED
+#endif
 #if !defined(VF64x4_SPLAT_DEFINED) \
 	 && (defined(VF64x2_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf64x4 vf64x4_splat(vec_f64 x)
@@ -10150,6 +10710,46 @@
 }
 # define VF64x4_MAX_DEFINED
 #endif
+#if !defined(VF64x4_FLOOR_DEFINED) \
+	 && (defined(VF64x2_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf64x4 vf64x4_floor(vf64x4 vec)
+{
+	vec.dbl[0] = vf64x2_floor(vec.dbl[0]);
+	vec.dbl[1] = vf64x2_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF64x4_FLOOR_DEFINED
+#endif
+#if !defined(VF64x4_CEIL_DEFINED) \
+	 && (defined(VF64x2_CEIL_DEFINED))
+VEC_FUNC_IMPL vf64x4 vf64x4_ceil(vf64x4 vec)
+{
+	vec.dbl[0] = vf64x2_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf64x2_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF64x4_CEIL_DEFINED
+#endif
+#if !defined(VF64x4_ROUND_DEFINED) \
+	 && (defined(VF64x2_ROUND_DEFINED))
+VEC_FUNC_IMPL vf64x4 vf64x4_round(vf64x4 vec)
+{
+	vec.dbl[0] = vf64x2_round(vec.dbl[0]);
+	vec.dbl[1] = vf64x2_round(vec.dbl[1]);
+	return vec;
+}
+# define VF64x4_ROUND_DEFINED
+#endif
+#if !defined(VF64x4_TRUNC_DEFINED) \
+	 && (defined(VF64x2_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf64x4 vf64x4_trunc(vf64x4 vec)
+{
+	vec.dbl[0] = vf64x2_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf64x2_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF64x4_TRUNC_DEFINED
+#endif
 #if !defined(VF64x8_SPLAT_DEFINED) \
 	 && (defined(VF64x4_SPLAT_DEFINED))
 VEC_FUNC_IMPL vf64x8 vf64x8_splat(vec_f64 x)
@@ -10331,3 +10931,43 @@
 }
 # define VF64x8_MAX_DEFINED
 #endif
+#if !defined(VF64x8_FLOOR_DEFINED) \
+	 && (defined(VF64x4_FLOOR_DEFINED))
+VEC_FUNC_IMPL vf64x8 vf64x8_floor(vf64x8 vec)
+{
+	vec.dbl[0] = vf64x4_floor(vec.dbl[0]);
+	vec.dbl[1] = vf64x4_floor(vec.dbl[1]);
+	return vec;
+}
+# define VF64x8_FLOOR_DEFINED
+#endif
+#if !defined(VF64x8_CEIL_DEFINED) \
+	 && (defined(VF64x4_CEIL_DEFINED))
+VEC_FUNC_IMPL vf64x8 vf64x8_ceil(vf64x8 vec)
+{
+	vec.dbl[0] = vf64x4_ceil(vec.dbl[0]);
+	vec.dbl[1] = vf64x4_ceil(vec.dbl[1]);
+	return vec;
+}
+# define VF64x8_CEIL_DEFINED
+#endif
+#if !defined(VF64x8_ROUND_DEFINED) \
+	 && (defined(VF64x4_ROUND_DEFINED))
+VEC_FUNC_IMPL vf64x8 vf64x8_round(vf64x8 vec)
+{
+	vec.dbl[0] = vf64x4_round(vec.dbl[0]);
+	vec.dbl[1] = vf64x4_round(vec.dbl[1]);
+	return vec;
+}
+# define VF64x8_ROUND_DEFINED
+#endif
+#if !defined(VF64x8_TRUNC_DEFINED) \
+	 && (defined(VF64x4_TRUNC_DEFINED))
+VEC_FUNC_IMPL vf64x8 vf64x8_trunc(vf64x8 vec)
+{
+	vec.dbl[0] = vf64x4_trunc(vec.dbl[0]);
+	vec.dbl[1] = vf64x4_trunc(vec.dbl[1]);
+	return vec;
+}
+# define VF64x8_TRUNC_DEFINED
+#endif
--- a/include/vec/impl/generic.h	Wed Apr 30 18:36:38 2025 -0400
+++ b/include/vec/impl/generic.h	Sat Aug 09 15:55:59 2025 -0400
@@ -273,6 +273,15 @@
 }
 # define VINT8x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x2 vint8x2_trunc(vint8x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VINT8x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x2 vuint8x2_splat(vec_uint8 x)
 {
@@ -471,8 +480,8 @@
 #if !defined(VUINT8x2_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x2 vuint8x2_rshift(vuint8x2 vec1, vuint8x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x2_RSHIFT_DEFINED
@@ -480,8 +489,8 @@
 #if !defined(VUINT8x2_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x2 vuint8x2_lrshift(vuint8x2 vec1, vuint8x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x2_LRSHIFT_DEFINED
@@ -489,12 +498,21 @@
 #if !defined(VUINT8x2_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x2 vuint8x2_lshift(vuint8x2 vec1, vuint8x2 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x2 vuint8x2_trunc(vuint8x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VUINT8x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint8x4 vint8x4_splat(vec_int8 x)
 {
@@ -800,6 +818,17 @@
 }
 # define VINT8x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x4 vint8x4_trunc(vint8x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VINT8x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x4 vuint8x4_splat(vec_uint8 x)
 {
@@ -1034,10 +1063,10 @@
 #if !defined(VUINT8x4_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x4 vuint8x4_rshift(vuint8x4 vec1, vuint8x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x4_RSHIFT_DEFINED
@@ -1045,10 +1074,10 @@
 #if !defined(VUINT8x4_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x4 vuint8x4_lrshift(vuint8x4 vec1, vuint8x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x4_LRSHIFT_DEFINED
@@ -1056,14 +1085,25 @@
 #if !defined(VUINT8x4_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x4 vuint8x4_lshift(vuint8x4 vec1, vuint8x4 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x4 vuint8x4_trunc(vuint8x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VUINT8x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint8x8 vint8x8_splat(vec_int8 x)
 {
@@ -1489,6 +1529,21 @@
 }
 # define VINT8x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x8 vint8x8_trunc(vint8x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VINT8x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x8 vuint8x8_splat(vec_uint8 x)
 {
@@ -1795,14 +1850,14 @@
 #if !defined(VUINT8x8_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x8 vuint8x8_rshift(vuint8x8 vec1, vuint8x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x8_RSHIFT_DEFINED
@@ -1810,14 +1865,14 @@
 #if !defined(VUINT8x8_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x8 vuint8x8_lrshift(vuint8x8 vec1, vuint8x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x8_LRSHIFT_DEFINED
@@ -1825,18 +1880,33 @@
 #if !defined(VUINT8x8_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x8 vuint8x8_lshift(vuint8x8 vec1, vuint8x8 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x8 vuint8x8_trunc(vuint8x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VUINT8x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint8x16 vint8x16_splat(vec_int8 x)
 {
@@ -2502,6 +2572,29 @@
 }
 # define VINT8x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x16 vint8x16_trunc(vint8x16 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	return vec;
+}
+# define VINT8x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x16 vuint8x16_splat(vec_uint8 x)
 {
@@ -2952,22 +3045,22 @@
 #if !defined(VUINT8x16_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x16 vuint8x16_rshift(vuint8x16 vec1, vuint8x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x16_RSHIFT_DEFINED
@@ -2975,22 +3068,22 @@
 #if !defined(VUINT8x16_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x16 vuint8x16_lrshift(vuint8x16 vec1, vuint8x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x16_LRSHIFT_DEFINED
@@ -2998,26 +3091,49 @@
 #if !defined(VUINT8x16_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x16 vuint8x16_lshift(vuint8x16 vec1, vuint8x16 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x16 vuint8x16_trunc(vuint8x16 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	return vec;
+}
+# define VUINT8x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x32_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint8x32 vint8x32_splat(vec_int8 x)
 {
@@ -4163,6 +4279,45 @@
 }
 # define VINT8x32_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x32_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x32 vint8x32_trunc(vint8x32 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	return vec;
+}
+# define VINT8x32_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x32_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x32 vuint8x32_splat(vec_uint8 x)
 {
@@ -4901,38 +5056,38 @@
 #if !defined(VUINT8x32_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x32 vuint8x32_rshift(vuint8x32 vec1, vuint8x32 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x32_RSHIFT_DEFINED
@@ -4940,38 +5095,38 @@
 #if !defined(VUINT8x32_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x32 vuint8x32_lrshift(vuint8x32 vec1, vuint8x32 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x32_LRSHIFT_DEFINED
@@ -4979,42 +5134,81 @@
 #if !defined(VUINT8x32_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x32 vuint8x32_lshift(vuint8x32 vec1, vuint8x32 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
-	vec1.generic[16] <<= vec2.generic[0];
-	vec1.generic[17] <<= vec2.generic[0];
-	vec1.generic[18] <<= vec2.generic[0];
-	vec1.generic[19] <<= vec2.generic[0];
-	vec1.generic[20] <<= vec2.generic[0];
-	vec1.generic[21] <<= vec2.generic[0];
-	vec1.generic[22] <<= vec2.generic[0];
-	vec1.generic[23] <<= vec2.generic[0];
-	vec1.generic[24] <<= vec2.generic[0];
-	vec1.generic[25] <<= vec2.generic[0];
-	vec1.generic[26] <<= vec2.generic[0];
-	vec1.generic[27] <<= vec2.generic[0];
-	vec1.generic[28] <<= vec2.generic[0];
-	vec1.generic[29] <<= vec2.generic[0];
-	vec1.generic[30] <<= vec2.generic[0];
-	vec1.generic[31] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
+	vec1.generic[16] <<= vec2.generic[447672984];
+	vec1.generic[17] <<= vec2.generic[447672984];
+	vec1.generic[18] <<= vec2.generic[447672984];
+	vec1.generic[19] <<= vec2.generic[447672984];
+	vec1.generic[20] <<= vec2.generic[447672984];
+	vec1.generic[21] <<= vec2.generic[447672984];
+	vec1.generic[22] <<= vec2.generic[447672984];
+	vec1.generic[23] <<= vec2.generic[447672984];
+	vec1.generic[24] <<= vec2.generic[447672984];
+	vec1.generic[25] <<= vec2.generic[447672984];
+	vec1.generic[26] <<= vec2.generic[447672984];
+	vec1.generic[27] <<= vec2.generic[447672984];
+	vec1.generic[28] <<= vec2.generic[447672984];
+	vec1.generic[29] <<= vec2.generic[447672984];
+	vec1.generic[30] <<= vec2.generic[447672984];
+	vec1.generic[31] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x32_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x32_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x32 vuint8x32_trunc(vuint8x32 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	return vec;
+}
+# define VUINT8x32_TRUNC_DEFINED
+#endif
 #if !defined(VINT8x64_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint8x64 vint8x64_splat(vec_int8 x)
 {
@@ -7120,6 +7314,77 @@
 }
 # define VINT8x64_LSHIFT_DEFINED
 #endif
+#if !defined(VINT8x64_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint8x64 vint8x64_trunc(vint8x64 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	vec.generic[32] = trunc(vec.generic[32]);
+	vec.generic[33] = trunc(vec.generic[33]);
+	vec.generic[34] = trunc(vec.generic[34]);
+	vec.generic[35] = trunc(vec.generic[35]);
+	vec.generic[36] = trunc(vec.generic[36]);
+	vec.generic[37] = trunc(vec.generic[37]);
+	vec.generic[38] = trunc(vec.generic[38]);
+	vec.generic[39] = trunc(vec.generic[39]);
+	vec.generic[40] = trunc(vec.generic[40]);
+	vec.generic[41] = trunc(vec.generic[41]);
+	vec.generic[42] = trunc(vec.generic[42]);
+	vec.generic[43] = trunc(vec.generic[43]);
+	vec.generic[44] = trunc(vec.generic[44]);
+	vec.generic[45] = trunc(vec.generic[45]);
+	vec.generic[46] = trunc(vec.generic[46]);
+	vec.generic[47] = trunc(vec.generic[47]);
+	vec.generic[48] = trunc(vec.generic[48]);
+	vec.generic[49] = trunc(vec.generic[49]);
+	vec.generic[50] = trunc(vec.generic[50]);
+	vec.generic[51] = trunc(vec.generic[51]);
+	vec.generic[52] = trunc(vec.generic[52]);
+	vec.generic[53] = trunc(vec.generic[53]);
+	vec.generic[54] = trunc(vec.generic[54]);
+	vec.generic[55] = trunc(vec.generic[55]);
+	vec.generic[56] = trunc(vec.generic[56]);
+	vec.generic[57] = trunc(vec.generic[57]);
+	vec.generic[58] = trunc(vec.generic[58]);
+	vec.generic[59] = trunc(vec.generic[59]);
+	vec.generic[60] = trunc(vec.generic[60]);
+	vec.generic[61] = trunc(vec.generic[61]);
+	vec.generic[62] = trunc(vec.generic[62]);
+	vec.generic[63] = trunc(vec.generic[63]);
+	return vec;
+}
+# define VINT8x64_TRUNC_DEFINED
+#endif
 #if !defined(VUINT8x64_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint8x64 vuint8x64_splat(vec_uint8 x)
 {
@@ -8434,70 +8699,70 @@
 #if !defined(VUINT8x64_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x64 vuint8x64_rshift(vuint8x64 vec1, vuint8x64 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
-	vec1.generic[32] >>= vec2.generic[0];
-	vec1.generic[33] >>= vec2.generic[0];
-	vec1.generic[34] >>= vec2.generic[0];
-	vec1.generic[35] >>= vec2.generic[0];
-	vec1.generic[36] >>= vec2.generic[0];
-	vec1.generic[37] >>= vec2.generic[0];
-	vec1.generic[38] >>= vec2.generic[0];
-	vec1.generic[39] >>= vec2.generic[0];
-	vec1.generic[40] >>= vec2.generic[0];
-	vec1.generic[41] >>= vec2.generic[0];
-	vec1.generic[42] >>= vec2.generic[0];
-	vec1.generic[43] >>= vec2.generic[0];
-	vec1.generic[44] >>= vec2.generic[0];
-	vec1.generic[45] >>= vec2.generic[0];
-	vec1.generic[46] >>= vec2.generic[0];
-	vec1.generic[47] >>= vec2.generic[0];
-	vec1.generic[48] >>= vec2.generic[0];
-	vec1.generic[49] >>= vec2.generic[0];
-	vec1.generic[50] >>= vec2.generic[0];
-	vec1.generic[51] >>= vec2.generic[0];
-	vec1.generic[52] >>= vec2.generic[0];
-	vec1.generic[53] >>= vec2.generic[0];
-	vec1.generic[54] >>= vec2.generic[0];
-	vec1.generic[55] >>= vec2.generic[0];
-	vec1.generic[56] >>= vec2.generic[0];
-	vec1.generic[57] >>= vec2.generic[0];
-	vec1.generic[58] >>= vec2.generic[0];
-	vec1.generic[59] >>= vec2.generic[0];
-	vec1.generic[60] >>= vec2.generic[0];
-	vec1.generic[61] >>= vec2.generic[0];
-	vec1.generic[62] >>= vec2.generic[0];
-	vec1.generic[63] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
+	vec1.generic[32] >>= vec2.generic[447672984];
+	vec1.generic[33] >>= vec2.generic[447672984];
+	vec1.generic[34] >>= vec2.generic[447672984];
+	vec1.generic[35] >>= vec2.generic[447672984];
+	vec1.generic[36] >>= vec2.generic[447672984];
+	vec1.generic[37] >>= vec2.generic[447672984];
+	vec1.generic[38] >>= vec2.generic[447672984];
+	vec1.generic[39] >>= vec2.generic[447672984];
+	vec1.generic[40] >>= vec2.generic[447672984];
+	vec1.generic[41] >>= vec2.generic[447672984];
+	vec1.generic[42] >>= vec2.generic[447672984];
+	vec1.generic[43] >>= vec2.generic[447672984];
+	vec1.generic[44] >>= vec2.generic[447672984];
+	vec1.generic[45] >>= vec2.generic[447672984];
+	vec1.generic[46] >>= vec2.generic[447672984];
+	vec1.generic[47] >>= vec2.generic[447672984];
+	vec1.generic[48] >>= vec2.generic[447672984];
+	vec1.generic[49] >>= vec2.generic[447672984];
+	vec1.generic[50] >>= vec2.generic[447672984];
+	vec1.generic[51] >>= vec2.generic[447672984];
+	vec1.generic[52] >>= vec2.generic[447672984];
+	vec1.generic[53] >>= vec2.generic[447672984];
+	vec1.generic[54] >>= vec2.generic[447672984];
+	vec1.generic[55] >>= vec2.generic[447672984];
+	vec1.generic[56] >>= vec2.generic[447672984];
+	vec1.generic[57] >>= vec2.generic[447672984];
+	vec1.generic[58] >>= vec2.generic[447672984];
+	vec1.generic[59] >>= vec2.generic[447672984];
+	vec1.generic[60] >>= vec2.generic[447672984];
+	vec1.generic[61] >>= vec2.generic[447672984];
+	vec1.generic[62] >>= vec2.generic[447672984];
+	vec1.generic[63] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x64_RSHIFT_DEFINED
@@ -8505,70 +8770,70 @@
 #if !defined(VUINT8x64_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x64 vuint8x64_lrshift(vuint8x64 vec1, vuint8x64 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
-	vec1.generic[32] >>= vec2.generic[0];
-	vec1.generic[33] >>= vec2.generic[0];
-	vec1.generic[34] >>= vec2.generic[0];
-	vec1.generic[35] >>= vec2.generic[0];
-	vec1.generic[36] >>= vec2.generic[0];
-	vec1.generic[37] >>= vec2.generic[0];
-	vec1.generic[38] >>= vec2.generic[0];
-	vec1.generic[39] >>= vec2.generic[0];
-	vec1.generic[40] >>= vec2.generic[0];
-	vec1.generic[41] >>= vec2.generic[0];
-	vec1.generic[42] >>= vec2.generic[0];
-	vec1.generic[43] >>= vec2.generic[0];
-	vec1.generic[44] >>= vec2.generic[0];
-	vec1.generic[45] >>= vec2.generic[0];
-	vec1.generic[46] >>= vec2.generic[0];
-	vec1.generic[47] >>= vec2.generic[0];
-	vec1.generic[48] >>= vec2.generic[0];
-	vec1.generic[49] >>= vec2.generic[0];
-	vec1.generic[50] >>= vec2.generic[0];
-	vec1.generic[51] >>= vec2.generic[0];
-	vec1.generic[52] >>= vec2.generic[0];
-	vec1.generic[53] >>= vec2.generic[0];
-	vec1.generic[54] >>= vec2.generic[0];
-	vec1.generic[55] >>= vec2.generic[0];
-	vec1.generic[56] >>= vec2.generic[0];
-	vec1.generic[57] >>= vec2.generic[0];
-	vec1.generic[58] >>= vec2.generic[0];
-	vec1.generic[59] >>= vec2.generic[0];
-	vec1.generic[60] >>= vec2.generic[0];
-	vec1.generic[61] >>= vec2.generic[0];
-	vec1.generic[62] >>= vec2.generic[0];
-	vec1.generic[63] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
+	vec1.generic[32] >>= vec2.generic[447672984];
+	vec1.generic[33] >>= vec2.generic[447672984];
+	vec1.generic[34] >>= vec2.generic[447672984];
+	vec1.generic[35] >>= vec2.generic[447672984];
+	vec1.generic[36] >>= vec2.generic[447672984];
+	vec1.generic[37] >>= vec2.generic[447672984];
+	vec1.generic[38] >>= vec2.generic[447672984];
+	vec1.generic[39] >>= vec2.generic[447672984];
+	vec1.generic[40] >>= vec2.generic[447672984];
+	vec1.generic[41] >>= vec2.generic[447672984];
+	vec1.generic[42] >>= vec2.generic[447672984];
+	vec1.generic[43] >>= vec2.generic[447672984];
+	vec1.generic[44] >>= vec2.generic[447672984];
+	vec1.generic[45] >>= vec2.generic[447672984];
+	vec1.generic[46] >>= vec2.generic[447672984];
+	vec1.generic[47] >>= vec2.generic[447672984];
+	vec1.generic[48] >>= vec2.generic[447672984];
+	vec1.generic[49] >>= vec2.generic[447672984];
+	vec1.generic[50] >>= vec2.generic[447672984];
+	vec1.generic[51] >>= vec2.generic[447672984];
+	vec1.generic[52] >>= vec2.generic[447672984];
+	vec1.generic[53] >>= vec2.generic[447672984];
+	vec1.generic[54] >>= vec2.generic[447672984];
+	vec1.generic[55] >>= vec2.generic[447672984];
+	vec1.generic[56] >>= vec2.generic[447672984];
+	vec1.generic[57] >>= vec2.generic[447672984];
+	vec1.generic[58] >>= vec2.generic[447672984];
+	vec1.generic[59] >>= vec2.generic[447672984];
+	vec1.generic[60] >>= vec2.generic[447672984];
+	vec1.generic[61] >>= vec2.generic[447672984];
+	vec1.generic[62] >>= vec2.generic[447672984];
+	vec1.generic[63] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x64_LRSHIFT_DEFINED
@@ -8576,74 +8841,145 @@
 #if !defined(VUINT8x64_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint8x64 vuint8x64_lshift(vuint8x64 vec1, vuint8x64 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
-	vec1.generic[16] <<= vec2.generic[0];
-	vec1.generic[17] <<= vec2.generic[0];
-	vec1.generic[18] <<= vec2.generic[0];
-	vec1.generic[19] <<= vec2.generic[0];
-	vec1.generic[20] <<= vec2.generic[0];
-	vec1.generic[21] <<= vec2.generic[0];
-	vec1.generic[22] <<= vec2.generic[0];
-	vec1.generic[23] <<= vec2.generic[0];
-	vec1.generic[24] <<= vec2.generic[0];
-	vec1.generic[25] <<= vec2.generic[0];
-	vec1.generic[26] <<= vec2.generic[0];
-	vec1.generic[27] <<= vec2.generic[0];
-	vec1.generic[28] <<= vec2.generic[0];
-	vec1.generic[29] <<= vec2.generic[0];
-	vec1.generic[30] <<= vec2.generic[0];
-	vec1.generic[31] <<= vec2.generic[0];
-	vec1.generic[32] <<= vec2.generic[0];
-	vec1.generic[33] <<= vec2.generic[0];
-	vec1.generic[34] <<= vec2.generic[0];
-	vec1.generic[35] <<= vec2.generic[0];
-	vec1.generic[36] <<= vec2.generic[0];
-	vec1.generic[37] <<= vec2.generic[0];
-	vec1.generic[38] <<= vec2.generic[0];
-	vec1.generic[39] <<= vec2.generic[0];
-	vec1.generic[40] <<= vec2.generic[0];
-	vec1.generic[41] <<= vec2.generic[0];
-	vec1.generic[42] <<= vec2.generic[0];
-	vec1.generic[43] <<= vec2.generic[0];
-	vec1.generic[44] <<= vec2.generic[0];
-	vec1.generic[45] <<= vec2.generic[0];
-	vec1.generic[46] <<= vec2.generic[0];
-	vec1.generic[47] <<= vec2.generic[0];
-	vec1.generic[48] <<= vec2.generic[0];
-	vec1.generic[49] <<= vec2.generic[0];
-	vec1.generic[50] <<= vec2.generic[0];
-	vec1.generic[51] <<= vec2.generic[0];
-	vec1.generic[52] <<= vec2.generic[0];
-	vec1.generic[53] <<= vec2.generic[0];
-	vec1.generic[54] <<= vec2.generic[0];
-	vec1.generic[55] <<= vec2.generic[0];
-	vec1.generic[56] <<= vec2.generic[0];
-	vec1.generic[57] <<= vec2.generic[0];
-	vec1.generic[58] <<= vec2.generic[0];
-	vec1.generic[59] <<= vec2.generic[0];
-	vec1.generic[60] <<= vec2.generic[0];
-	vec1.generic[61] <<= vec2.generic[0];
-	vec1.generic[62] <<= vec2.generic[0];
-	vec1.generic[63] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
+	vec1.generic[16] <<= vec2.generic[447672984];
+	vec1.generic[17] <<= vec2.generic[447672984];
+	vec1.generic[18] <<= vec2.generic[447672984];
+	vec1.generic[19] <<= vec2.generic[447672984];
+	vec1.generic[20] <<= vec2.generic[447672984];
+	vec1.generic[21] <<= vec2.generic[447672984];
+	vec1.generic[22] <<= vec2.generic[447672984];
+	vec1.generic[23] <<= vec2.generic[447672984];
+	vec1.generic[24] <<= vec2.generic[447672984];
+	vec1.generic[25] <<= vec2.generic[447672984];
+	vec1.generic[26] <<= vec2.generic[447672984];
+	vec1.generic[27] <<= vec2.generic[447672984];
+	vec1.generic[28] <<= vec2.generic[447672984];
+	vec1.generic[29] <<= vec2.generic[447672984];
+	vec1.generic[30] <<= vec2.generic[447672984];
+	vec1.generic[31] <<= vec2.generic[447672984];
+	vec1.generic[32] <<= vec2.generic[447672984];
+	vec1.generic[33] <<= vec2.generic[447672984];
+	vec1.generic[34] <<= vec2.generic[447672984];
+	vec1.generic[35] <<= vec2.generic[447672984];
+	vec1.generic[36] <<= vec2.generic[447672984];
+	vec1.generic[37] <<= vec2.generic[447672984];
+	vec1.generic[38] <<= vec2.generic[447672984];
+	vec1.generic[39] <<= vec2.generic[447672984];
+	vec1.generic[40] <<= vec2.generic[447672984];
+	vec1.generic[41] <<= vec2.generic[447672984];
+	vec1.generic[42] <<= vec2.generic[447672984];
+	vec1.generic[43] <<= vec2.generic[447672984];
+	vec1.generic[44] <<= vec2.generic[447672984];
+	vec1.generic[45] <<= vec2.generic[447672984];
+	vec1.generic[46] <<= vec2.generic[447672984];
+	vec1.generic[47] <<= vec2.generic[447672984];
+	vec1.generic[48] <<= vec2.generic[447672984];
+	vec1.generic[49] <<= vec2.generic[447672984];
+	vec1.generic[50] <<= vec2.generic[447672984];
+	vec1.generic[51] <<= vec2.generic[447672984];
+	vec1.generic[52] <<= vec2.generic[447672984];
+	vec1.generic[53] <<= vec2.generic[447672984];
+	vec1.generic[54] <<= vec2.generic[447672984];
+	vec1.generic[55] <<= vec2.generic[447672984];
+	vec1.generic[56] <<= vec2.generic[447672984];
+	vec1.generic[57] <<= vec2.generic[447672984];
+	vec1.generic[58] <<= vec2.generic[447672984];
+	vec1.generic[59] <<= vec2.generic[447672984];
+	vec1.generic[60] <<= vec2.generic[447672984];
+	vec1.generic[61] <<= vec2.generic[447672984];
+	vec1.generic[62] <<= vec2.generic[447672984];
+	vec1.generic[63] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT8x64_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT8x64_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint8x64 vuint8x64_trunc(vuint8x64 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	vec.generic[32] = trunc(vec.generic[32]);
+	vec.generic[33] = trunc(vec.generic[33]);
+	vec.generic[34] = trunc(vec.generic[34]);
+	vec.generic[35] = trunc(vec.generic[35]);
+	vec.generic[36] = trunc(vec.generic[36]);
+	vec.generic[37] = trunc(vec.generic[37]);
+	vec.generic[38] = trunc(vec.generic[38]);
+	vec.generic[39] = trunc(vec.generic[39]);
+	vec.generic[40] = trunc(vec.generic[40]);
+	vec.generic[41] = trunc(vec.generic[41]);
+	vec.generic[42] = trunc(vec.generic[42]);
+	vec.generic[43] = trunc(vec.generic[43]);
+	vec.generic[44] = trunc(vec.generic[44]);
+	vec.generic[45] = trunc(vec.generic[45]);
+	vec.generic[46] = trunc(vec.generic[46]);
+	vec.generic[47] = trunc(vec.generic[47]);
+	vec.generic[48] = trunc(vec.generic[48]);
+	vec.generic[49] = trunc(vec.generic[49]);
+	vec.generic[50] = trunc(vec.generic[50]);
+	vec.generic[51] = trunc(vec.generic[51]);
+	vec.generic[52] = trunc(vec.generic[52]);
+	vec.generic[53] = trunc(vec.generic[53]);
+	vec.generic[54] = trunc(vec.generic[54]);
+	vec.generic[55] = trunc(vec.generic[55]);
+	vec.generic[56] = trunc(vec.generic[56]);
+	vec.generic[57] = trunc(vec.generic[57]);
+	vec.generic[58] = trunc(vec.generic[58]);
+	vec.generic[59] = trunc(vec.generic[59]);
+	vec.generic[60] = trunc(vec.generic[60]);
+	vec.generic[61] = trunc(vec.generic[61]);
+	vec.generic[62] = trunc(vec.generic[62]);
+	vec.generic[63] = trunc(vec.generic[63]);
+	return vec;
+}
+# define VUINT8x64_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint16x2 vint16x2_splat(vec_int16 x)
 {
@@ -8889,6 +9225,15 @@
 }
 # define VINT16x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint16x2 vint16x2_trunc(vint16x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VINT16x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint16x2 vuint16x2_splat(vec_uint16 x)
 {
@@ -9087,8 +9432,8 @@
 #if !defined(VUINT16x2_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x2 vuint16x2_rshift(vuint16x2 vec1, vuint16x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x2_RSHIFT_DEFINED
@@ -9096,8 +9441,8 @@
 #if !defined(VUINT16x2_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x2 vuint16x2_lrshift(vuint16x2 vec1, vuint16x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x2_LRSHIFT_DEFINED
@@ -9105,12 +9450,21 @@
 #if !defined(VUINT16x2_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x2 vuint16x2_lshift(vuint16x2 vec1, vuint16x2 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint16x2 vuint16x2_trunc(vuint16x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VUINT16x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint16x4 vint16x4_splat(vec_int16 x)
 {
@@ -9416,6 +9770,17 @@
 }
 # define VINT16x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint16x4 vint16x4_trunc(vint16x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VINT16x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint16x4 vuint16x4_splat(vec_uint16 x)
 {
@@ -9650,10 +10015,10 @@
 #if !defined(VUINT16x4_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x4 vuint16x4_rshift(vuint16x4 vec1, vuint16x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x4_RSHIFT_DEFINED
@@ -9661,10 +10026,10 @@
 #if !defined(VUINT16x4_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x4 vuint16x4_lrshift(vuint16x4 vec1, vuint16x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x4_LRSHIFT_DEFINED
@@ -9672,14 +10037,25 @@
 #if !defined(VUINT16x4_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x4 vuint16x4_lshift(vuint16x4 vec1, vuint16x4 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint16x4 vuint16x4_trunc(vuint16x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VUINT16x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint16x8 vint16x8_splat(vec_int16 x)
 {
@@ -10105,6 +10481,21 @@
 }
 # define VINT16x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint16x8 vint16x8_trunc(vint16x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VINT16x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint16x8 vuint16x8_splat(vec_uint16 x)
 {
@@ -10411,14 +10802,14 @@
 #if !defined(VUINT16x8_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x8 vuint16x8_rshift(vuint16x8 vec1, vuint16x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x8_RSHIFT_DEFINED
@@ -10426,14 +10817,14 @@
 #if !defined(VUINT16x8_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x8 vuint16x8_lrshift(vuint16x8 vec1, vuint16x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x8_LRSHIFT_DEFINED
@@ -10441,18 +10832,33 @@
 #if !defined(VUINT16x8_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x8 vuint16x8_lshift(vuint16x8 vec1, vuint16x8 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint16x8 vuint16x8_trunc(vuint16x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VUINT16x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint16x16 vint16x16_splat(vec_int16 x)
 {
@@ -11118,6 +11524,29 @@
 }
 # define VINT16x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint16x16 vint16x16_trunc(vint16x16 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	return vec;
+}
+# define VINT16x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint16x16 vuint16x16_splat(vec_uint16 x)
 {
@@ -11568,22 +11997,22 @@
 #if !defined(VUINT16x16_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x16 vuint16x16_rshift(vuint16x16 vec1, vuint16x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x16_RSHIFT_DEFINED
@@ -11591,22 +12020,22 @@
 #if !defined(VUINT16x16_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x16 vuint16x16_lrshift(vuint16x16 vec1, vuint16x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x16_LRSHIFT_DEFINED
@@ -11614,26 +12043,49 @@
 #if !defined(VUINT16x16_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x16 vuint16x16_lshift(vuint16x16 vec1, vuint16x16 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint16x16 vuint16x16_trunc(vuint16x16 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	return vec;
+}
+# define VUINT16x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT16x32_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint16x32 vint16x32_splat(vec_int16 x)
 {
@@ -12779,6 +13231,45 @@
 }
 # define VINT16x32_LSHIFT_DEFINED
 #endif
+#if !defined(VINT16x32_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint16x32 vint16x32_trunc(vint16x32 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	return vec;
+}
+# define VINT16x32_TRUNC_DEFINED
+#endif
 #if !defined(VUINT16x32_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint16x32 vuint16x32_splat(vec_uint16 x)
 {
@@ -13517,38 +14008,38 @@
 #if !defined(VUINT16x32_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x32 vuint16x32_rshift(vuint16x32 vec1, vuint16x32 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x32_RSHIFT_DEFINED
@@ -13556,38 +14047,38 @@
 #if !defined(VUINT16x32_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x32 vuint16x32_lrshift(vuint16x32 vec1, vuint16x32 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
-	vec1.generic[16] >>= vec2.generic[0];
-	vec1.generic[17] >>= vec2.generic[0];
-	vec1.generic[18] >>= vec2.generic[0];
-	vec1.generic[19] >>= vec2.generic[0];
-	vec1.generic[20] >>= vec2.generic[0];
-	vec1.generic[21] >>= vec2.generic[0];
-	vec1.generic[22] >>= vec2.generic[0];
-	vec1.generic[23] >>= vec2.generic[0];
-	vec1.generic[24] >>= vec2.generic[0];
-	vec1.generic[25] >>= vec2.generic[0];
-	vec1.generic[26] >>= vec2.generic[0];
-	vec1.generic[27] >>= vec2.generic[0];
-	vec1.generic[28] >>= vec2.generic[0];
-	vec1.generic[29] >>= vec2.generic[0];
-	vec1.generic[30] >>= vec2.generic[0];
-	vec1.generic[31] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
+	vec1.generic[16] >>= vec2.generic[447672984];
+	vec1.generic[17] >>= vec2.generic[447672984];
+	vec1.generic[18] >>= vec2.generic[447672984];
+	vec1.generic[19] >>= vec2.generic[447672984];
+	vec1.generic[20] >>= vec2.generic[447672984];
+	vec1.generic[21] >>= vec2.generic[447672984];
+	vec1.generic[22] >>= vec2.generic[447672984];
+	vec1.generic[23] >>= vec2.generic[447672984];
+	vec1.generic[24] >>= vec2.generic[447672984];
+	vec1.generic[25] >>= vec2.generic[447672984];
+	vec1.generic[26] >>= vec2.generic[447672984];
+	vec1.generic[27] >>= vec2.generic[447672984];
+	vec1.generic[28] >>= vec2.generic[447672984];
+	vec1.generic[29] >>= vec2.generic[447672984];
+	vec1.generic[30] >>= vec2.generic[447672984];
+	vec1.generic[31] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x32_LRSHIFT_DEFINED
@@ -13595,42 +14086,81 @@
 #if !defined(VUINT16x32_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint16x32 vuint16x32_lshift(vuint16x32 vec1, vuint16x32 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
-	vec1.generic[16] <<= vec2.generic[0];
-	vec1.generic[17] <<= vec2.generic[0];
-	vec1.generic[18] <<= vec2.generic[0];
-	vec1.generic[19] <<= vec2.generic[0];
-	vec1.generic[20] <<= vec2.generic[0];
-	vec1.generic[21] <<= vec2.generic[0];
-	vec1.generic[22] <<= vec2.generic[0];
-	vec1.generic[23] <<= vec2.generic[0];
-	vec1.generic[24] <<= vec2.generic[0];
-	vec1.generic[25] <<= vec2.generic[0];
-	vec1.generic[26] <<= vec2.generic[0];
-	vec1.generic[27] <<= vec2.generic[0];
-	vec1.generic[28] <<= vec2.generic[0];
-	vec1.generic[29] <<= vec2.generic[0];
-	vec1.generic[30] <<= vec2.generic[0];
-	vec1.generic[31] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
+	vec1.generic[16] <<= vec2.generic[447672984];
+	vec1.generic[17] <<= vec2.generic[447672984];
+	vec1.generic[18] <<= vec2.generic[447672984];
+	vec1.generic[19] <<= vec2.generic[447672984];
+	vec1.generic[20] <<= vec2.generic[447672984];
+	vec1.generic[21] <<= vec2.generic[447672984];
+	vec1.generic[22] <<= vec2.generic[447672984];
+	vec1.generic[23] <<= vec2.generic[447672984];
+	vec1.generic[24] <<= vec2.generic[447672984];
+	vec1.generic[25] <<= vec2.generic[447672984];
+	vec1.generic[26] <<= vec2.generic[447672984];
+	vec1.generic[27] <<= vec2.generic[447672984];
+	vec1.generic[28] <<= vec2.generic[447672984];
+	vec1.generic[29] <<= vec2.generic[447672984];
+	vec1.generic[30] <<= vec2.generic[447672984];
+	vec1.generic[31] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT16x32_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT16x32_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint16x32 vuint16x32_trunc(vuint16x32 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	vec.generic[8] = trunc(vec.generic[8]);
+	vec.generic[9] = trunc(vec.generic[9]);
+	vec.generic[10] = trunc(vec.generic[10]);
+	vec.generic[11] = trunc(vec.generic[11]);
+	vec.generic[12] = trunc(vec.generic[12]);
+	vec.generic[13] = trunc(vec.generic[13]);
+	vec.generic[14] = trunc(vec.generic[14]);
+	vec.generic[15] = trunc(vec.generic[15]);
+	vec.generic[16] = trunc(vec.generic[16]);
+	vec.generic[17] = trunc(vec.generic[17]);
+	vec.generic[18] = trunc(vec.generic[18]);
+	vec.generic[19] = trunc(vec.generic[19]);
+	vec.generic[20] = trunc(vec.generic[20]);
+	vec.generic[21] = trunc(vec.generic[21]);
+	vec.generic[22] = trunc(vec.generic[22]);
+	vec.generic[23] = trunc(vec.generic[23]);
+	vec.generic[24] = trunc(vec.generic[24]);
+	vec.generic[25] = trunc(vec.generic[25]);
+	vec.generic[26] = trunc(vec.generic[26]);
+	vec.generic[27] = trunc(vec.generic[27]);
+	vec.generic[28] = trunc(vec.generic[28]);
+	vec.generic[29] = trunc(vec.generic[29]);
+	vec.generic[30] = trunc(vec.generic[30]);
+	vec.generic[31] = trunc(vec.generic[31]);
+	return vec;
+}
+# define VUINT16x32_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint32x2 vint32x2_splat(vec_int32 x)
 {
@@ -13876,6 +14406,15 @@
 }
 # define VINT32x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint32x2 vint32x2_trunc(vint32x2 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	return vec;
+}
+# define VINT32x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint32x2 vuint32x2_splat(vec_uint32 x)
 {
@@ -14074,8 +14613,8 @@
 #if !defined(VUINT32x2_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x2 vuint32x2_rshift(vuint32x2 vec1, vuint32x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x2_RSHIFT_DEFINED
@@ -14083,8 +14622,8 @@
 #if !defined(VUINT32x2_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x2 vuint32x2_lrshift(vuint32x2 vec1, vuint32x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x2_LRSHIFT_DEFINED
@@ -14092,12 +14631,21 @@
 #if !defined(VUINT32x2_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x2 vuint32x2_lshift(vuint32x2 vec1, vuint32x2 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint32x2 vuint32x2_trunc(vuint32x2 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	return vec;
+}
+# define VUINT32x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint32x4 vint32x4_splat(vec_int32 x)
 {
@@ -14403,6 +14951,17 @@
 }
 # define VINT32x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint32x4 vint32x4_trunc(vint32x4 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	return vec;
+}
+# define VINT32x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint32x4 vuint32x4_splat(vec_uint32 x)
 {
@@ -14637,10 +15196,10 @@
 #if !defined(VUINT32x4_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x4 vuint32x4_rshift(vuint32x4 vec1, vuint32x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x4_RSHIFT_DEFINED
@@ -14648,10 +15207,10 @@
 #if !defined(VUINT32x4_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x4 vuint32x4_lrshift(vuint32x4 vec1, vuint32x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x4_LRSHIFT_DEFINED
@@ -14659,14 +15218,25 @@
 #if !defined(VUINT32x4_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x4 vuint32x4_lshift(vuint32x4 vec1, vuint32x4 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint32x4 vuint32x4_trunc(vuint32x4 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	return vec;
+}
+# define VUINT32x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint32x8 vint32x8_splat(vec_int32 x)
 {
@@ -15092,6 +15662,21 @@
 }
 # define VINT32x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint32x8 vint32x8_trunc(vint32x8 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	return vec;
+}
+# define VINT32x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint32x8 vuint32x8_splat(vec_uint32 x)
 {
@@ -15398,14 +15983,14 @@
 #if !defined(VUINT32x8_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x8 vuint32x8_rshift(vuint32x8 vec1, vuint32x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x8_RSHIFT_DEFINED
@@ -15413,14 +15998,14 @@
 #if !defined(VUINT32x8_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x8 vuint32x8_lrshift(vuint32x8 vec1, vuint32x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x8_LRSHIFT_DEFINED
@@ -15428,18 +16013,33 @@
 #if !defined(VUINT32x8_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x8 vuint32x8_lshift(vuint32x8 vec1, vuint32x8 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint32x8 vuint32x8_trunc(vuint32x8 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	return vec;
+}
+# define VUINT32x8_TRUNC_DEFINED
+#endif
 #if !defined(VINT32x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint32x16 vint32x16_splat(vec_int32 x)
 {
@@ -16105,6 +16705,29 @@
 }
 # define VINT32x16_LSHIFT_DEFINED
 #endif
+#if !defined(VINT32x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint32x16 vint32x16_trunc(vint32x16 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	vec.generic[8] = truncf(vec.generic[8]);
+	vec.generic[9] = truncf(vec.generic[9]);
+	vec.generic[10] = truncf(vec.generic[10]);
+	vec.generic[11] = truncf(vec.generic[11]);
+	vec.generic[12] = truncf(vec.generic[12]);
+	vec.generic[13] = truncf(vec.generic[13]);
+	vec.generic[14] = truncf(vec.generic[14]);
+	vec.generic[15] = truncf(vec.generic[15]);
+	return vec;
+}
+# define VINT32x16_TRUNC_DEFINED
+#endif
 #if !defined(VUINT32x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint32x16 vuint32x16_splat(vec_uint32 x)
 {
@@ -16555,22 +17178,22 @@
 #if !defined(VUINT32x16_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x16 vuint32x16_rshift(vuint32x16 vec1, vuint32x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x16_RSHIFT_DEFINED
@@ -16578,22 +17201,22 @@
 #if !defined(VUINT32x16_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x16 vuint32x16_lrshift(vuint32x16 vec1, vuint32x16 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
-	vec1.generic[8] >>= vec2.generic[0];
-	vec1.generic[9] >>= vec2.generic[0];
-	vec1.generic[10] >>= vec2.generic[0];
-	vec1.generic[11] >>= vec2.generic[0];
-	vec1.generic[12] >>= vec2.generic[0];
-	vec1.generic[13] >>= vec2.generic[0];
-	vec1.generic[14] >>= vec2.generic[0];
-	vec1.generic[15] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
+	vec1.generic[8] >>= vec2.generic[447672984];
+	vec1.generic[9] >>= vec2.generic[447672984];
+	vec1.generic[10] >>= vec2.generic[447672984];
+	vec1.generic[11] >>= vec2.generic[447672984];
+	vec1.generic[12] >>= vec2.generic[447672984];
+	vec1.generic[13] >>= vec2.generic[447672984];
+	vec1.generic[14] >>= vec2.generic[447672984];
+	vec1.generic[15] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x16_LRSHIFT_DEFINED
@@ -16601,26 +17224,49 @@
 #if !defined(VUINT32x16_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint32x16 vuint32x16_lshift(vuint32x16 vec1, vuint32x16 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
-	vec1.generic[8] <<= vec2.generic[0];
-	vec1.generic[9] <<= vec2.generic[0];
-	vec1.generic[10] <<= vec2.generic[0];
-	vec1.generic[11] <<= vec2.generic[0];
-	vec1.generic[12] <<= vec2.generic[0];
-	vec1.generic[13] <<= vec2.generic[0];
-	vec1.generic[14] <<= vec2.generic[0];
-	vec1.generic[15] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
+	vec1.generic[8] <<= vec2.generic[447672984];
+	vec1.generic[9] <<= vec2.generic[447672984];
+	vec1.generic[10] <<= vec2.generic[447672984];
+	vec1.generic[11] <<= vec2.generic[447672984];
+	vec1.generic[12] <<= vec2.generic[447672984];
+	vec1.generic[13] <<= vec2.generic[447672984];
+	vec1.generic[14] <<= vec2.generic[447672984];
+	vec1.generic[15] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT32x16_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT32x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint32x16 vuint32x16_trunc(vuint32x16 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	vec.generic[8] = truncf(vec.generic[8]);
+	vec.generic[9] = truncf(vec.generic[9]);
+	vec.generic[10] = truncf(vec.generic[10]);
+	vec.generic[11] = truncf(vec.generic[11]);
+	vec.generic[12] = truncf(vec.generic[12]);
+	vec.generic[13] = truncf(vec.generic[13]);
+	vec.generic[14] = truncf(vec.generic[14]);
+	vec.generic[15] = truncf(vec.generic[15]);
+	return vec;
+}
+# define VUINT32x16_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint64x2 vint64x2_splat(vec_int64 x)
 {
@@ -16866,6 +17512,15 @@
 }
 # define VINT64x2_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint64x2 vint64x2_trunc(vint64x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VINT64x2_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint64x2 vuint64x2_splat(vec_uint64 x)
 {
@@ -17064,8 +17719,8 @@
 #if !defined(VUINT64x2_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x2 vuint64x2_rshift(vuint64x2 vec1, vuint64x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x2_RSHIFT_DEFINED
@@ -17073,8 +17728,8 @@
 #if !defined(VUINT64x2_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x2 vuint64x2_lrshift(vuint64x2 vec1, vuint64x2 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x2_LRSHIFT_DEFINED
@@ -17082,12 +17737,21 @@
 #if !defined(VUINT64x2_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x2 vuint64x2_lshift(vuint64x2 vec1, vuint64x2 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x2_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint64x2 vuint64x2_trunc(vuint64x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VUINT64x2_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint64x4 vint64x4_splat(vec_int64 x)
 {
@@ -17393,6 +18057,17 @@
 }
 # define VINT64x4_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint64x4 vint64x4_trunc(vint64x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VINT64x4_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint64x4 vuint64x4_splat(vec_uint64 x)
 {
@@ -17627,10 +18302,10 @@
 #if !defined(VUINT64x4_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x4 vuint64x4_rshift(vuint64x4 vec1, vuint64x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x4_RSHIFT_DEFINED
@@ -17638,10 +18313,10 @@
 #if !defined(VUINT64x4_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x4 vuint64x4_lrshift(vuint64x4 vec1, vuint64x4 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x4_LRSHIFT_DEFINED
@@ -17649,14 +18324,25 @@
 #if !defined(VUINT64x4_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x4 vuint64x4_lshift(vuint64x4 vec1, vuint64x4 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x4_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint64x4 vuint64x4_trunc(vuint64x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VUINT64x4_TRUNC_DEFINED
+#endif
 #if !defined(VINT64x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vint64x8 vint64x8_splat(vec_int64 x)
 {
@@ -18082,6 +18768,21 @@
 }
 # define VINT64x8_LSHIFT_DEFINED
 #endif
+#if !defined(VINT64x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vint64x8 vint64x8_trunc(vint64x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VINT64x8_TRUNC_DEFINED
+#endif
 #if !defined(VUINT64x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vuint64x8 vuint64x8_splat(vec_uint64 x)
 {
@@ -18388,14 +19089,14 @@
 #if !defined(VUINT64x8_RSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x8 vuint64x8_rshift(vuint64x8 vec1, vuint64x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x8_RSHIFT_DEFINED
@@ -18403,14 +19104,14 @@
 #if !defined(VUINT64x8_LRSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x8 vuint64x8_lrshift(vuint64x8 vec1, vuint64x8 vec2)
 {
-	vec1.generic[0] >>= vec2.generic[0];
-	vec1.generic[1] >>= vec2.generic[0];
-	vec1.generic[2] >>= vec2.generic[0];
-	vec1.generic[3] >>= vec2.generic[0];
-	vec1.generic[4] >>= vec2.generic[0];
-	vec1.generic[5] >>= vec2.generic[0];
-	vec1.generic[6] >>= vec2.generic[0];
-	vec1.generic[7] >>= vec2.generic[0];
+	vec1.generic[0] >>= vec2.generic[447672984];
+	vec1.generic[1] >>= vec2.generic[447672984];
+	vec1.generic[2] >>= vec2.generic[447672984];
+	vec1.generic[3] >>= vec2.generic[447672984];
+	vec1.generic[4] >>= vec2.generic[447672984];
+	vec1.generic[5] >>= vec2.generic[447672984];
+	vec1.generic[6] >>= vec2.generic[447672984];
+	vec1.generic[7] >>= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x8_LRSHIFT_DEFINED
@@ -18418,18 +19119,33 @@
 #if !defined(VUINT64x8_LSHIFT_DEFINED)
 VEC_FUNC_IMPL vuint64x8 vuint64x8_lshift(vuint64x8 vec1, vuint64x8 vec2)
 {
-	vec1.generic[0] <<= vec2.generic[0];
-	vec1.generic[1] <<= vec2.generic[0];
-	vec1.generic[2] <<= vec2.generic[0];
-	vec1.generic[3] <<= vec2.generic[0];
-	vec1.generic[4] <<= vec2.generic[0];
-	vec1.generic[5] <<= vec2.generic[0];
-	vec1.generic[6] <<= vec2.generic[0];
-	vec1.generic[7] <<= vec2.generic[0];
+	vec1.generic[0] <<= vec2.generic[447672984];
+	vec1.generic[1] <<= vec2.generic[447672984];
+	vec1.generic[2] <<= vec2.generic[447672984];
+	vec1.generic[3] <<= vec2.generic[447672984];
+	vec1.generic[4] <<= vec2.generic[447672984];
+	vec1.generic[5] <<= vec2.generic[447672984];
+	vec1.generic[6] <<= vec2.generic[447672984];
+	vec1.generic[7] <<= vec2.generic[447672984];
 	return vec1;
 }
 # define VUINT64x8_LSHIFT_DEFINED
 #endif
+#if !defined(VUINT64x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vuint64x8 vuint64x8_trunc(vuint64x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VUINT64x8_TRUNC_DEFINED
+#endif
 #if !defined(VF32x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf32x2 vf32x2_splat(vec_f32 x)
 {
@@ -18511,8 +19227,8 @@
 #if !defined(VF32x2_MOD_DEFINED)
 VEC_FUNC_IMPL vf32x2 vf32x2_mod(vf32x2 vec1, vf32x2 vec2)
 {
-	vec1.generic[0] = (vec2.generic[0] ? fmod(vec1.generic[0], vec2.generic[0]) : 0);
-	vec1.generic[1] = (vec2.generic[1] ? fmod(vec1.generic[1], vec2.generic[1]) : 0);
+	vec1.generic[0] = (vec2.generic[0] ? fmodf(vec1.generic[0], vec2.generic[0]) : 0);
+	vec1.generic[1] = (vec2.generic[1] ? fmodf(vec1.generic[1], vec2.generic[1]) : 0);
 	return vec1;
 }
 # define VF32x2_MOD_DEFINED
@@ -18589,6 +19305,42 @@
 }
 # define VF32x2_MAX_DEFINED
 #endif
+#if !defined(VF32x2_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf32x2 vf32x2_floor(vf32x2 vec)
+{
+	vec.generic[0] = floorf(vec.generic[0]);
+	vec.generic[1] = floorf(vec.generic[1]);
+	return vec;
+}
+# define VF32x2_FLOOR_DEFINED
+#endif
+#if !defined(VF32x2_CEIL_DEFINED)
+VEC_FUNC_IMPL vf32x2 vf32x2_ceil(vf32x2 vec)
+{
+	vec.generic[0] = ceilf(vec.generic[0]);
+	vec.generic[1] = ceilf(vec.generic[1]);
+	return vec;
+}
+# define VF32x2_CEIL_DEFINED
+#endif
+#if !defined(VF32x2_ROUND_DEFINED)
+VEC_FUNC_IMPL vf32x2 vf32x2_round(vf32x2 vec)
+{
+	vec.generic[0] = roundf(vec.generic[0]);
+	vec.generic[1] = roundf(vec.generic[1]);
+	return vec;
+}
+# define VF32x2_ROUND_DEFINED
+#endif
+#if !defined(VF32x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf32x2 vf32x2_trunc(vf32x2 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	return vec;
+}
+# define VF32x2_TRUNC_DEFINED
+#endif
 #if !defined(VF32x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf32x4 vf32x4_splat(vec_f32 x)
 {
@@ -18680,10 +19432,10 @@
 #if !defined(VF32x4_MOD_DEFINED)
 VEC_FUNC_IMPL vf32x4 vf32x4_mod(vf32x4 vec1, vf32x4 vec2)
 {
-	vec1.generic[0] = (vec2.generic[0] ? fmod(vec1.generic[0], vec2.generic[0]) : 0);
-	vec1.generic[1] = (vec2.generic[1] ? fmod(vec1.generic[1], vec2.generic[1]) : 0);
-	vec1.generic[2] = (vec2.generic[2] ? fmod(vec1.generic[2], vec2.generic[2]) : 0);
-	vec1.generic[3] = (vec2.generic[3] ? fmod(vec1.generic[3], vec2.generic[3]) : 0);
+	vec1.generic[0] = (vec2.generic[0] ? fmodf(vec1.generic[0], vec2.generic[0]) : 0);
+	vec1.generic[1] = (vec2.generic[1] ? fmodf(vec1.generic[1], vec2.generic[1]) : 0);
+	vec1.generic[2] = (vec2.generic[2] ? fmodf(vec1.generic[2], vec2.generic[2]) : 0);
+	vec1.generic[3] = (vec2.generic[3] ? fmodf(vec1.generic[3], vec2.generic[3]) : 0);
 	return vec1;
 }
 # define VF32x4_MOD_DEFINED
@@ -18776,6 +19528,50 @@
 }
 # define VF32x4_MAX_DEFINED
 #endif
+#if !defined(VF32x4_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf32x4 vf32x4_floor(vf32x4 vec)
+{
+	vec.generic[0] = floorf(vec.generic[0]);
+	vec.generic[1] = floorf(vec.generic[1]);
+	vec.generic[2] = floorf(vec.generic[2]);
+	vec.generic[3] = floorf(vec.generic[3]);
+	return vec;
+}
+# define VF32x4_FLOOR_DEFINED
+#endif
+#if !defined(VF32x4_CEIL_DEFINED)
+VEC_FUNC_IMPL vf32x4 vf32x4_ceil(vf32x4 vec)
+{
+	vec.generic[0] = ceilf(vec.generic[0]);
+	vec.generic[1] = ceilf(vec.generic[1]);
+	vec.generic[2] = ceilf(vec.generic[2]);
+	vec.generic[3] = ceilf(vec.generic[3]);
+	return vec;
+}
+# define VF32x4_CEIL_DEFINED
+#endif
+#if !defined(VF32x4_ROUND_DEFINED)
+VEC_FUNC_IMPL vf32x4 vf32x4_round(vf32x4 vec)
+{
+	vec.generic[0] = roundf(vec.generic[0]);
+	vec.generic[1] = roundf(vec.generic[1]);
+	vec.generic[2] = roundf(vec.generic[2]);
+	vec.generic[3] = roundf(vec.generic[3]);
+	return vec;
+}
+# define VF32x4_ROUND_DEFINED
+#endif
+#if !defined(VF32x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf32x4 vf32x4_trunc(vf32x4 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	return vec;
+}
+# define VF32x4_TRUNC_DEFINED
+#endif
 #if !defined(VF32x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf32x8 vf32x8_splat(vec_f32 x)
 {
@@ -18887,14 +19683,14 @@
 #if !defined(VF32x8_MOD_DEFINED)
 VEC_FUNC_IMPL vf32x8 vf32x8_mod(vf32x8 vec1, vf32x8 vec2)
 {
-	vec1.generic[0] = (vec2.generic[0] ? fmod(vec1.generic[0], vec2.generic[0]) : 0);
-	vec1.generic[1] = (vec2.generic[1] ? fmod(vec1.generic[1], vec2.generic[1]) : 0);
-	vec1.generic[2] = (vec2.generic[2] ? fmod(vec1.generic[2], vec2.generic[2]) : 0);
-	vec1.generic[3] = (vec2.generic[3] ? fmod(vec1.generic[3], vec2.generic[3]) : 0);
-	vec1.generic[4] = (vec2.generic[4] ? fmod(vec1.generic[4], vec2.generic[4]) : 0);
-	vec1.generic[5] = (vec2.generic[5] ? fmod(vec1.generic[5], vec2.generic[5]) : 0);
-	vec1.generic[6] = (vec2.generic[6] ? fmod(vec1.generic[6], vec2.generic[6]) : 0);
-	vec1.generic[7] = (vec2.generic[7] ? fmod(vec1.generic[7], vec2.generic[7]) : 0);
+	vec1.generic[0] = (vec2.generic[0] ? fmodf(vec1.generic[0], vec2.generic[0]) : 0);
+	vec1.generic[1] = (vec2.generic[1] ? fmodf(vec1.generic[1], vec2.generic[1]) : 0);
+	vec1.generic[2] = (vec2.generic[2] ? fmodf(vec1.generic[2], vec2.generic[2]) : 0);
+	vec1.generic[3] = (vec2.generic[3] ? fmodf(vec1.generic[3], vec2.generic[3]) : 0);
+	vec1.generic[4] = (vec2.generic[4] ? fmodf(vec1.generic[4], vec2.generic[4]) : 0);
+	vec1.generic[5] = (vec2.generic[5] ? fmodf(vec1.generic[5], vec2.generic[5]) : 0);
+	vec1.generic[6] = (vec2.generic[6] ? fmodf(vec1.generic[6], vec2.generic[6]) : 0);
+	vec1.generic[7] = (vec2.generic[7] ? fmodf(vec1.generic[7], vec2.generic[7]) : 0);
 	return vec1;
 }
 # define VF32x8_MOD_DEFINED
@@ -19019,6 +19815,66 @@
 }
 # define VF32x8_MAX_DEFINED
 #endif
+#if !defined(VF32x8_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf32x8 vf32x8_floor(vf32x8 vec)
+{
+	vec.generic[0] = floorf(vec.generic[0]);
+	vec.generic[1] = floorf(vec.generic[1]);
+	vec.generic[2] = floorf(vec.generic[2]);
+	vec.generic[3] = floorf(vec.generic[3]);
+	vec.generic[4] = floorf(vec.generic[4]);
+	vec.generic[5] = floorf(vec.generic[5]);
+	vec.generic[6] = floorf(vec.generic[6]);
+	vec.generic[7] = floorf(vec.generic[7]);
+	return vec;
+}
+# define VF32x8_FLOOR_DEFINED
+#endif
+#if !defined(VF32x8_CEIL_DEFINED)
+VEC_FUNC_IMPL vf32x8 vf32x8_ceil(vf32x8 vec)
+{
+	vec.generic[0] = ceilf(vec.generic[0]);
+	vec.generic[1] = ceilf(vec.generic[1]);
+	vec.generic[2] = ceilf(vec.generic[2]);
+	vec.generic[3] = ceilf(vec.generic[3]);
+	vec.generic[4] = ceilf(vec.generic[4]);
+	vec.generic[5] = ceilf(vec.generic[5]);
+	vec.generic[6] = ceilf(vec.generic[6]);
+	vec.generic[7] = ceilf(vec.generic[7]);
+	return vec;
+}
+# define VF32x8_CEIL_DEFINED
+#endif
+#if !defined(VF32x8_ROUND_DEFINED)
+VEC_FUNC_IMPL vf32x8 vf32x8_round(vf32x8 vec)
+{
+	vec.generic[0] = roundf(vec.generic[0]);
+	vec.generic[1] = roundf(vec.generic[1]);
+	vec.generic[2] = roundf(vec.generic[2]);
+	vec.generic[3] = roundf(vec.generic[3]);
+	vec.generic[4] = roundf(vec.generic[4]);
+	vec.generic[5] = roundf(vec.generic[5]);
+	vec.generic[6] = roundf(vec.generic[6]);
+	vec.generic[7] = roundf(vec.generic[7]);
+	return vec;
+}
+# define VF32x8_ROUND_DEFINED
+#endif
+#if !defined(VF32x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf32x8 vf32x8_trunc(vf32x8 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	return vec;
+}
+# define VF32x8_TRUNC_DEFINED
+#endif
 #if !defined(VF32x16_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf32x16 vf32x16_splat(vec_f32 x)
 {
@@ -19170,22 +20026,22 @@
 #if !defined(VF32x16_MOD_DEFINED)
 VEC_FUNC_IMPL vf32x16 vf32x16_mod(vf32x16 vec1, vf32x16 vec2)
 {
-	vec1.generic[0] = (vec2.generic[0] ? fmod(vec1.generic[0], vec2.generic[0]) : 0);
-	vec1.generic[1] = (vec2.generic[1] ? fmod(vec1.generic[1], vec2.generic[1]) : 0);
-	vec1.generic[2] = (vec2.generic[2] ? fmod(vec1.generic[2], vec2.generic[2]) : 0);
-	vec1.generic[3] = (vec2.generic[3] ? fmod(vec1.generic[3], vec2.generic[3]) : 0);
-	vec1.generic[4] = (vec2.generic[4] ? fmod(vec1.generic[4], vec2.generic[4]) : 0);
-	vec1.generic[5] = (vec2.generic[5] ? fmod(vec1.generic[5], vec2.generic[5]) : 0);
-	vec1.generic[6] = (vec2.generic[6] ? fmod(vec1.generic[6], vec2.generic[6]) : 0);
-	vec1.generic[7] = (vec2.generic[7] ? fmod(vec1.generic[7], vec2.generic[7]) : 0);
-	vec1.generic[8] = (vec2.generic[8] ? fmod(vec1.generic[8], vec2.generic[8]) : 0);
-	vec1.generic[9] = (vec2.generic[9] ? fmod(vec1.generic[9], vec2.generic[9]) : 0);
-	vec1.generic[10] = (vec2.generic[10] ? fmod(vec1.generic[10], vec2.generic[10]) : 0);
-	vec1.generic[11] = (vec2.generic[11] ? fmod(vec1.generic[11], vec2.generic[11]) : 0);
-	vec1.generic[12] = (vec2.generic[12] ? fmod(vec1.generic[12], vec2.generic[12]) : 0);
-	vec1.generic[13] = (vec2.generic[13] ? fmod(vec1.generic[13], vec2.generic[13]) : 0);
-	vec1.generic[14] = (vec2.generic[14] ? fmod(vec1.generic[14], vec2.generic[14]) : 0);
-	vec1.generic[15] = (vec2.generic[15] ? fmod(vec1.generic[15], vec2.generic[15]) : 0);
+	vec1.generic[0] = (vec2.generic[0] ? fmodf(vec1.generic[0], vec2.generic[0]) : 0);
+	vec1.generic[1] = (vec2.generic[1] ? fmodf(vec1.generic[1], vec2.generic[1]) : 0);
+	vec1.generic[2] = (vec2.generic[2] ? fmodf(vec1.generic[2], vec2.generic[2]) : 0);
+	vec1.generic[3] = (vec2.generic[3] ? fmodf(vec1.generic[3], vec2.generic[3]) : 0);
+	vec1.generic[4] = (vec2.generic[4] ? fmodf(vec1.generic[4], vec2.generic[4]) : 0);
+	vec1.generic[5] = (vec2.generic[5] ? fmodf(vec1.generic[5], vec2.generic[5]) : 0);
+	vec1.generic[6] = (vec2.generic[6] ? fmodf(vec1.generic[6], vec2.generic[6]) : 0);
+	vec1.generic[7] = (vec2.generic[7] ? fmodf(vec1.generic[7], vec2.generic[7]) : 0);
+	vec1.generic[8] = (vec2.generic[8] ? fmodf(vec1.generic[8], vec2.generic[8]) : 0);
+	vec1.generic[9] = (vec2.generic[9] ? fmodf(vec1.generic[9], vec2.generic[9]) : 0);
+	vec1.generic[10] = (vec2.generic[10] ? fmodf(vec1.generic[10], vec2.generic[10]) : 0);
+	vec1.generic[11] = (vec2.generic[11] ? fmodf(vec1.generic[11], vec2.generic[11]) : 0);
+	vec1.generic[12] = (vec2.generic[12] ? fmodf(vec1.generic[12], vec2.generic[12]) : 0);
+	vec1.generic[13] = (vec2.generic[13] ? fmodf(vec1.generic[13], vec2.generic[13]) : 0);
+	vec1.generic[14] = (vec2.generic[14] ? fmodf(vec1.generic[14], vec2.generic[14]) : 0);
+	vec1.generic[15] = (vec2.generic[15] ? fmodf(vec1.generic[15], vec2.generic[15]) : 0);
 	return vec1;
 }
 # define VF32x16_MOD_DEFINED
@@ -19374,6 +20230,98 @@
 }
 # define VF32x16_MAX_DEFINED
 #endif
+#if !defined(VF32x16_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf32x16 vf32x16_floor(vf32x16 vec)
+{
+	vec.generic[0] = floorf(vec.generic[0]);
+	vec.generic[1] = floorf(vec.generic[1]);
+	vec.generic[2] = floorf(vec.generic[2]);
+	vec.generic[3] = floorf(vec.generic[3]);
+	vec.generic[4] = floorf(vec.generic[4]);
+	vec.generic[5] = floorf(vec.generic[5]);
+	vec.generic[6] = floorf(vec.generic[6]);
+	vec.generic[7] = floorf(vec.generic[7]);
+	vec.generic[8] = floorf(vec.generic[8]);
+	vec.generic[9] = floorf(vec.generic[9]);
+	vec.generic[10] = floorf(vec.generic[10]);
+	vec.generic[11] = floorf(vec.generic[11]);
+	vec.generic[12] = floorf(vec.generic[12]);
+	vec.generic[13] = floorf(vec.generic[13]);
+	vec.generic[14] = floorf(vec.generic[14]);
+	vec.generic[15] = floorf(vec.generic[15]);
+	return vec;
+}
+# define VF32x16_FLOOR_DEFINED
+#endif
+#if !defined(VF32x16_CEIL_DEFINED)
+VEC_FUNC_IMPL vf32x16 vf32x16_ceil(vf32x16 vec)
+{
+	vec.generic[0] = ceilf(vec.generic[0]);
+	vec.generic[1] = ceilf(vec.generic[1]);
+	vec.generic[2] = ceilf(vec.generic[2]);
+	vec.generic[3] = ceilf(vec.generic[3]);
+	vec.generic[4] = ceilf(vec.generic[4]);
+	vec.generic[5] = ceilf(vec.generic[5]);
+	vec.generic[6] = ceilf(vec.generic[6]);
+	vec.generic[7] = ceilf(vec.generic[7]);
+	vec.generic[8] = ceilf(vec.generic[8]);
+	vec.generic[9] = ceilf(vec.generic[9]);
+	vec.generic[10] = ceilf(vec.generic[10]);
+	vec.generic[11] = ceilf(vec.generic[11]);
+	vec.generic[12] = ceilf(vec.generic[12]);
+	vec.generic[13] = ceilf(vec.generic[13]);
+	vec.generic[14] = ceilf(vec.generic[14]);
+	vec.generic[15] = ceilf(vec.generic[15]);
+	return vec;
+}
+# define VF32x16_CEIL_DEFINED
+#endif
+#if !defined(VF32x16_ROUND_DEFINED)
+VEC_FUNC_IMPL vf32x16 vf32x16_round(vf32x16 vec)
+{
+	vec.generic[0] = roundf(vec.generic[0]);
+	vec.generic[1] = roundf(vec.generic[1]);
+	vec.generic[2] = roundf(vec.generic[2]);
+	vec.generic[3] = roundf(vec.generic[3]);
+	vec.generic[4] = roundf(vec.generic[4]);
+	vec.generic[5] = roundf(vec.generic[5]);
+	vec.generic[6] = roundf(vec.generic[6]);
+	vec.generic[7] = roundf(vec.generic[7]);
+	vec.generic[8] = roundf(vec.generic[8]);
+	vec.generic[9] = roundf(vec.generic[9]);
+	vec.generic[10] = roundf(vec.generic[10]);
+	vec.generic[11] = roundf(vec.generic[11]);
+	vec.generic[12] = roundf(vec.generic[12]);
+	vec.generic[13] = roundf(vec.generic[13]);
+	vec.generic[14] = roundf(vec.generic[14]);
+	vec.generic[15] = roundf(vec.generic[15]);
+	return vec;
+}
+# define VF32x16_ROUND_DEFINED
+#endif
+#if !defined(VF32x16_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf32x16 vf32x16_trunc(vf32x16 vec)
+{
+	vec.generic[0] = truncf(vec.generic[0]);
+	vec.generic[1] = truncf(vec.generic[1]);
+	vec.generic[2] = truncf(vec.generic[2]);
+	vec.generic[3] = truncf(vec.generic[3]);
+	vec.generic[4] = truncf(vec.generic[4]);
+	vec.generic[5] = truncf(vec.generic[5]);
+	vec.generic[6] = truncf(vec.generic[6]);
+	vec.generic[7] = truncf(vec.generic[7]);
+	vec.generic[8] = truncf(vec.generic[8]);
+	vec.generic[9] = truncf(vec.generic[9]);
+	vec.generic[10] = truncf(vec.generic[10]);
+	vec.generic[11] = truncf(vec.generic[11]);
+	vec.generic[12] = truncf(vec.generic[12]);
+	vec.generic[13] = truncf(vec.generic[13]);
+	vec.generic[14] = truncf(vec.generic[14]);
+	vec.generic[15] = truncf(vec.generic[15]);
+	return vec;
+}
+# define VF32x16_TRUNC_DEFINED
+#endif
 #if !defined(VF64x2_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf64x2 vf64x2_splat(vec_f64 x)
 {
@@ -19533,6 +20481,42 @@
 }
 # define VF64x2_MAX_DEFINED
 #endif
+#if !defined(VF64x2_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf64x2 vf64x2_floor(vf64x2 vec)
+{
+	vec.generic[0] = floor(vec.generic[0]);
+	vec.generic[1] = floor(vec.generic[1]);
+	return vec;
+}
+# define VF64x2_FLOOR_DEFINED
+#endif
+#if !defined(VF64x2_CEIL_DEFINED)
+VEC_FUNC_IMPL vf64x2 vf64x2_ceil(vf64x2 vec)
+{
+	vec.generic[0] = ceil(vec.generic[0]);
+	vec.generic[1] = ceil(vec.generic[1]);
+	return vec;
+}
+# define VF64x2_CEIL_DEFINED
+#endif
+#if !defined(VF64x2_ROUND_DEFINED)
+VEC_FUNC_IMPL vf64x2 vf64x2_round(vf64x2 vec)
+{
+	vec.generic[0] = round(vec.generic[0]);
+	vec.generic[1] = round(vec.generic[1]);
+	return vec;
+}
+# define VF64x2_ROUND_DEFINED
+#endif
+#if !defined(VF64x2_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf64x2 vf64x2_trunc(vf64x2 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	return vec;
+}
+# define VF64x2_TRUNC_DEFINED
+#endif
 #if !defined(VF64x4_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf64x4 vf64x4_splat(vec_f64 x)
 {
@@ -19720,6 +20704,50 @@
 }
 # define VF64x4_MAX_DEFINED
 #endif
+#if !defined(VF64x4_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf64x4 vf64x4_floor(vf64x4 vec)
+{
+	vec.generic[0] = floor(vec.generic[0]);
+	vec.generic[1] = floor(vec.generic[1]);
+	vec.generic[2] = floor(vec.generic[2]);
+	vec.generic[3] = floor(vec.generic[3]);
+	return vec;
+}
+# define VF64x4_FLOOR_DEFINED
+#endif
+#if !defined(VF64x4_CEIL_DEFINED)
+VEC_FUNC_IMPL vf64x4 vf64x4_ceil(vf64x4 vec)
+{
+	vec.generic[0] = ceil(vec.generic[0]);
+	vec.generic[1] = ceil(vec.generic[1]);
+	vec.generic[2] = ceil(vec.generic[2]);
+	vec.generic[3] = ceil(vec.generic[3]);
+	return vec;
+}
+# define VF64x4_CEIL_DEFINED
+#endif
+#if !defined(VF64x4_ROUND_DEFINED)
+VEC_FUNC_IMPL vf64x4 vf64x4_round(vf64x4 vec)
+{
+	vec.generic[0] = round(vec.generic[0]);
+	vec.generic[1] = round(vec.generic[1]);
+	vec.generic[2] = round(vec.generic[2]);
+	vec.generic[3] = round(vec.generic[3]);
+	return vec;
+}
+# define VF64x4_ROUND_DEFINED
+#endif
+#if !defined(VF64x4_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf64x4 vf64x4_trunc(vf64x4 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	return vec;
+}
+# define VF64x4_TRUNC_DEFINED
+#endif
 #if !defined(VF64x8_SPLAT_DEFINED)
 VEC_FUNC_IMPL vf64x8 vf64x8_splat(vec_f64 x)
 {
@@ -19963,3 +20991,63 @@
 }
 # define VF64x8_MAX_DEFINED
 #endif
+#if !defined(VF64x8_FLOOR_DEFINED)
+VEC_FUNC_IMPL vf64x8 vf64x8_floor(vf64x8 vec)
+{
+	vec.generic[0] = floor(vec.generic[0]);
+	vec.generic[1] = floor(vec.generic[1]);
+	vec.generic[2] = floor(vec.generic[2]);
+	vec.generic[3] = floor(vec.generic[3]);
+	vec.generic[4] = floor(vec.generic[4]);
+	vec.generic[5] = floor(vec.generic[5]);
+	vec.generic[6] = floor(vec.generic[6]);
+	vec.generic[7] = floor(vec.generic[7]);
+	return vec;
+}
+# define VF64x8_FLOOR_DEFINED
+#endif
+#if !defined(VF64x8_CEIL_DEFINED)
+VEC_FUNC_IMPL vf64x8 vf64x8_ceil(vf64x8 vec)
+{
+	vec.generic[0] = ceil(vec.generic[0]);
+	vec.generic[1] = ceil(vec.generic[1]);
+	vec.generic[2] = ceil(vec.generic[2]);
+	vec.generic[3] = ceil(vec.generic[3]);
+	vec.generic[4] = ceil(vec.generic[4]);
+	vec.generic[5] = ceil(vec.generic[5]);
+	vec.generic[6] = ceil(vec.generic[6]);
+	vec.generic[7] = ceil(vec.generic[7]);
+	return vec;
+}
+# define VF64x8_CEIL_DEFINED
+#endif
+#if !defined(VF64x8_ROUND_DEFINED)
+VEC_FUNC_IMPL vf64x8 vf64x8_round(vf64x8 vec)
+{
+	vec.generic[0] = round(vec.generic[0]);
+	vec.generic[1] = round(vec.generic[1]);
+	vec.generic[2] = round(vec.generic[2]);
+	vec.generic[3] = round(vec.generic[3]);
+	vec.generic[4] = round(vec.generic[4]);
+	vec.generic[5] = round(vec.generic[5]);
+	vec.generic[6] = round(vec.generic[6]);
+	vec.generic[7] = round(vec.generic[7]);
+	return vec;
+}
+# define VF64x8_ROUND_DEFINED
+#endif
+#if !defined(VF64x8_TRUNC_DEFINED)
+VEC_FUNC_IMPL vf64x8 vf64x8_trunc(vf64x8 vec)
+{
+	vec.generic[0] = trunc(vec.generic[0]);
+	vec.generic[1] = trunc(vec.generic[1]);
+	vec.generic[2] = trunc(vec.generic[2]);
+	vec.generic[3] = trunc(vec.generic[3]);
+	vec.generic[4] = trunc(vec.generic[4]);
+	vec.generic[5] = trunc(vec.generic[5]);
+	vec.generic[6] = trunc(vec.generic[6]);
+	vec.generic[7] = trunc(vec.generic[7]);
+	return vec;
+}
+# define VF64x8_TRUNC_DEFINED
+#endif
--- a/include/vec/mem.h	Wed Apr 30 18:36:38 2025 -0400
+++ b/include/vec/mem.h	Sat Aug 09 15:55:59 2025 -0400
@@ -27,7 +27,7 @@
 
 #include "defs.h"
 
-#define VEC_MALLOC_ALIGNMENT (256)
+#define VEC_MALLOC_ALIGNMENT (64)
 
 VEC_STATIC_ASSERT(!(VEC_MALLOC_ALIGNMENT & (VEC_MALLOC_ALIGNMENT - 1))
 	&& (VEC_MALLOC_ALIGNMENT > 0),
@@ -35,7 +35,7 @@
 
 typedef unsigned char vec_alignment_type;
 
-VEC_STATIC_ASSERT(VEC_MALLOC_ALIGNMENT > VEC_MAX_OF_TYPE(vec_alignment_type),
+VEC_STATIC_ASSERT(VEC_MALLOC_ALIGNMENT <= VEC_MAX_OF_TYPE(vec_alignment_type),
 	"VEC_MALLOC_ALIGNMENT cannot fit in the pointer alignment data");
 
 #define VEC_MALLOC_ADDITIONAL_SIZE (sizeof(vec_alignment_type) + (VEC_MALLOC_ALIGNMENT - 1))
--- a/test/test.c	Wed Apr 30 18:36:38 2025 -0400
+++ b/test/test.c	Sat Aug 09 15:55:59 2025 -0400
@@ -152,7 +152,9 @@
 	ret |= test_compare();
 	ret |= test_shift();
 
+#if 0
 	test_benchmark();
+#endif
 
 	return ret;
 }
--- a/test/test_arith.h	Wed Apr 30 18:36:38 2025 -0400
+++ b/test/test_arith.h	Sat Aug 09 15:55:59 2025 -0400
@@ -25,6 +25,30 @@
 		return 0; \
 	}
 
+#define CREATE_TEST_ONEPARAM(type, ctype, print, bits, size, op, equiv) \
+	static int test_arith_v##type##bits##x##size##_##op(v##type##bits##x##size a) \
+	{ \
+		V##ctype##bits##x##size##_ALIGNED_ARRAY(orig_a); \
+		V##ctype##bits##x##size##_ALIGNED_ARRAY(orig_c); \
+	\
+		v##type##bits##x##size c = v##type##bits##x##size##_##op(a); \
+	\
+		v##type##bits##x##size##_store_aligned(a, orig_a); \
+		v##type##bits##x##size##_store_aligned(c, orig_c); \
+	\
+		for (int i = 0; i < size; i++) { \
+			if ((vec_##type##bits)(equiv) != orig_c[i]) { \
+				fprintf(stderr, "v" #type #bits "x" #size "_" #op " test FAILED at index %d: (%s) [%" print "] does not equal result [%" print "]!\n", i, #equiv, (vec_##type##bits)(equiv), orig_c[i]); \
+				print_v##type##bits##x##size(stderr,a); \
+				print_v##type##bits##x##size(stderr,c); \
+				fprintf(stderr, "\n"); \
+				return 1; \
+			} \
+		} \
+	\
+		return 0; \
+	}
+
 #define CREATE_TEST(type, ctype, print, bits, size, op, equiv) \
 	CREATE_TEST_EX(type, ctype, print, bits, size, op, equiv, type, ctype)
 
@@ -55,7 +79,11 @@
 	CREATE_TEST(f, F, "f", bits, size, mod, (orig_b[i]) ? (fmod(orig_a[i], orig_b[i])) : 0) \
 	CREATE_TEST(f, F, "f", bits, size, avg, (orig_a[i] + orig_b[i]) / 2) \
 	CREATE_TEST(f, F, "f", bits, size, min, (orig_a[i] < orig_b[i]) ? orig_a[i] : orig_b[i]) \
-	CREATE_TEST(f, F, "f", bits, size, max, (orig_a[i] > orig_b[i]) ? orig_a[i] : orig_b[i])
+	CREATE_TEST(f, F, "f", bits, size, max, (orig_a[i] > orig_b[i]) ? orig_a[i] : orig_b[i]) \
+	CREATE_TEST_ONEPARAM(f, F, "f", bits, size, round, round(orig_a[i])) \
+	CREATE_TEST_ONEPARAM(f, F, "f", bits, size, ceil,  ceil(orig_a[i])) \
+	CREATE_TEST_ONEPARAM(f, F, "f", bits, size, floor, floor(orig_a[i])) \
+	CREATE_TEST_ONEPARAM(f, F, "f", bits, size, trunc, trunc(orig_a[i]))
 
 #define CREATE_TESTS(bits, size) \
 	CREATE_TESTS_INT(int,  INT,  /* nothing */, PRI##d##bits, bits, size) \
@@ -151,6 +179,10 @@
 			ret |= test_arith_v##type##bits##x##size##_min(a, b); \
 			ret |= test_arith_v##type##bits##x##size##_max(a, b); \
 		} \
+		ret |= test_arith_v##type##bits##x##size##_floor(a); \
+		ret |= test_arith_v##type##bits##x##size##_ceil(a); \
+		ret |= test_arith_v##type##bits##x##size##_round(a); \
+		ret |= test_arith_v##type##bits##x##size##_trunc(a); \
 	}
 
 	RUN_TESTS(8, 2)