diff --git a/src/vmath.nim b/src/vmath.nim index 3eeb9c1..fbc0565 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -521,124 +521,8 @@ proc ivec4*(uvec4: Uvec4): Ivec4 {.inline.} = proc uvec4*(ivec4: Ivec4): Uvec4 {.inline.} = uvec4(ivec4.x.uint32, ivec4.y.uint32, ivec4.z.uint32, ivec4.w.uint32) -{.experimental: "dotOperators".} -proc num(letter: char, fields: NimNode): int = - ## Given a swizzle character gives back the location number. - case letter: - of 'x', 'r', 's': 0 - of 'y', 'g', 't': 1 - of 'z', 'b', 'p': 2 - of 'w', 'a', 'q': 3 - else: - error "invalid swizzle character: " & letter, fields - quit() - -proc typePrefix(node: NimNode): string = - ## Given a node of type GVec234 gives its prefix type. - ## IVec2 -> "i", DVec4 -> "d", Vec3 -> "" - let typeName = - when defined(vmathArrayBased): - node.getType()[2].repr - elif defined(vmathObjBased): - node.getType()[2][0].getType().repr - elif true or defined(vmathObjArrayBased): - node.getType()[2][0].getType()[2].repr - case typeName: - of "bool": "b" - of "int32": "i" - of "uint32": "u" - of "float32": "" - of "float", "float64": "d" - else: - error "invalid vector type: " & typeName, node - quit() - -macro `.`*(v: GVec234, fields: untyped): untyped = - ## Adds support for swizzle getter. - ## x y z w - ## r g b a - ## s t p q - ## v.xyz, v.xxx, v.zyx ... - ## v.rgb, v.rrr, v.bgr ... - ## v.stp, v.sss, v.pts ... - let swizzle = fields.repr - let vec = ident(typePrefix(v) & "vec" & $swizzle.len) - if swizzle.len == 1: - let a = num(swizzle[0], fields) - result = quote do: - `v`[`a`] - elif swizzle.len == 2: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - result = quote do: - `vec`(`v`[`a`], `v`[`b`]) - elif swizzle.len == 3: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - c = num(swizzle[2], fields) - result = quote do: - `vec`(`v`[`a`], `v`[`b`], `v`[`c`]) - elif swizzle.len == 4: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - c = num(swizzle[2], fields) - d = num(swizzle[3], fields) - result = quote do: - `vec`(`v`[`a`], `v`[`b`], `v`[`c`], `v`[`d`]) - else: - error "invalid number of swizzle characters: " & swizzle, fields - -macro `.=`*(v: GVec234, fields: untyped, e: untyped): untyped = - ## Adds support for swizzle setter. - ## x y z w - ## r g b a - ## s t p q - ## v.xyz, v.xxx, v.zyx ... - ## v.rgb, v.rrr, v.bgr ... - ## v.stp, v.sss, v.pts ... - let swizzle = fields.repr - if swizzle.len == 1: - let a = num(swizzle[0], fields) - result = quote do: - `v`[`a`] = `e` - elif swizzle.len == 2: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - result = quote do: - block: - let tmp = `e` - `v`[`a`] = tmp[0] - `v`[`b`] = tmp[1] - elif swizzle.len == 3: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - c = num(swizzle[2], fields) - result = quote do: - block: - let tmp = `e` - `v`[`a`] = tmp[0] - `v`[`b`] = tmp[1] - `v`[`c`] = tmp[2] - elif swizzle.len == 4: - let - a = num(swizzle[0], fields) - b = num(swizzle[1], fields) - c = num(swizzle[2], fields) - d = num(swizzle[3], fields) - result = quote do: - block: - let tmp = `e` - `v`[`a`] = tmp[0] - `v`[`b`] = tmp[1] - `v`[`c`] = tmp[2] - `v`[`d`] = tmp[3] - else: - error "invalid number of swizzle characters: " & swizzle, fields +# TODO when https://github.com/nim-lang/Nim/issues/13063 is fixed use macros. +include vmath/swizzle proc `==`*[T](a, b: GVec2[T]): bool = a.x == b.x and a.y == b.y diff --git a/src/vmath/macroswizzle.nim b/src/vmath/macroswizzle.nim new file mode 100644 index 0000000..9b7908c --- /dev/null +++ b/src/vmath/macroswizzle.nim @@ -0,0 +1,119 @@ + +{.experimental: "dotOperators".} +proc num(letter: char, fields: NimNode): int = + ## Given a swizzle character gives back the location number. + case letter: + of 'x', 'r', 's': 0 + of 'y', 'g', 't': 1 + of 'z', 'b', 'p': 2 + of 'w', 'a', 'q': 3 + else: + error "invalid swizzle character: " & letter, fields + quit() + +proc typePrefix(node: NimNode): string = + ## Given a node of type GVec234 gives its prefix type. + ## IVec2 -> "i", DVec4 -> "d", Vec3 -> "" + let typeName = + when defined(vmathArrayBased): + node.getType()[2].repr + elif defined(vmathObjBased): + node.getType()[2][0].getType().repr + elif true or defined(vmathObjArrayBased): + node.getType()[2][0].getType()[2].repr + case typeName: + of "bool": "b" + of "int32": "i" + of "uint32": "u" + of "float32": "" + of "float", "float64": "d" + else: + error "invalid vector type: " & typeName, node + quit() + +macro `.`*(v: GVec234, fields: untyped): untyped = + ## Adds support for swizzle getter. + ## x y z w + ## r g b a + ## s t p q + ## v.xyz, v.xxx, v.zyx ... + ## v.rgb, v.rrr, v.bgr ... + ## v.stp, v.sss, v.pts ... + let swizzle = fields.repr + let vec = ident(typePrefix(v) & "vec" & $swizzle.len) + if swizzle.len == 1: + let a = num(swizzle[0], fields) + result = quote do: + `v`[`a`] + elif swizzle.len == 2: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + result = quote do: + `vec`(`v`[`a`], `v`[`b`]) + elif swizzle.len == 3: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + c = num(swizzle[2], fields) + result = quote do: + `vec`(`v`[`a`], `v`[`b`], `v`[`c`]) + elif swizzle.len == 4: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + c = num(swizzle[2], fields) + d = num(swizzle[3], fields) + result = quote do: + `vec`(`v`[`a`], `v`[`b`], `v`[`c`], `v`[`d`]) + else: + error "invalid number of swizzle characters: " & swizzle, fields + +macro `.=`*(v: GVec234, fields: untyped, e: untyped): untyped = + ## Adds support for swizzle setter. + ## x y z w + ## r g b a + ## s t p q + ## v.xyz, v.xxx, v.zyx ... + ## v.rgb, v.rrr, v.bgr ... + ## v.stp, v.sss, v.pts ... + let swizzle = fields.repr + if swizzle.len == 1: + let a = num(swizzle[0], fields) + result = quote do: + `v`[`a`] = `e` + elif swizzle.len == 2: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + result = quote do: + block: + let tmp = `e` + `v`[`a`] = tmp[0] + `v`[`b`] = tmp[1] + elif swizzle.len == 3: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + c = num(swizzle[2], fields) + result = quote do: + block: + let tmp = `e` + `v`[`a`] = tmp[0] + `v`[`b`] = tmp[1] + `v`[`c`] = tmp[2] + elif swizzle.len == 4: + let + a = num(swizzle[0], fields) + b = num(swizzle[1], fields) + c = num(swizzle[2], fields) + d = num(swizzle[3], fields) + result = quote do: + block: + let tmp = `e` + `v`[`a`] = tmp[0] + `v`[`b`] = tmp[1] + `v`[`c`] = tmp[2] + `v`[`d`] = tmp[3] + else: + error "invalid number of swizzle characters: " & swizzle, fields diff --git a/src/vmath/swizzle.nim b/src/vmath/swizzle.nim new file mode 100644 index 0000000..c599448 --- /dev/null +++ b/src/vmath/swizzle.nim @@ -0,0 +1,5079 @@ +# Generated by tools/gensswizzle + +# 1 x rgba +template r*[T](a: GVec234[T]): T = a[0] +func `r=`*[T](a: var GVec234[T], b: T) = a[0] = b +template g*[T](a: GVec234[T]): T = a[1] +func `g=`*[T](a: var GVec234[T], b: T) = a[1] = b +template b*[T](a: GVec234[T]): T = a[2] +func `b=`*[T](a: var GVec234[T], b: T) = a[2] = b +template a*[T](a: GVec234[T]): T = a[3] +func `a=`*[T](a: var GVec234[T], b: T) = a[3] = b + +# 1 x stpq +template s*[T](a: GVec234[T]): T = a[0] +func `s=`*[T](a: var GVec234[T], b: T) = a[0] = b +template t*[T](a: GVec234[T]): T = a[1] +func `t=`*[T](a: var GVec234[T], b: T) = a[1] = b +template p*[T](a: GVec234[T]): T = a[2] +func `p=`*[T](a: var GVec234[T], b: T) = a[2] = b +template q*[T](a: GVec234[T]): T = a[3] +func `q=`*[T](a: var GVec234[T], b: T) = a[3] = b + +# 2 x xyzw +template xx*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[0]) +template `xx=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[0] = y +template xy*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[1]) +template `xy=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[1] = y +template xz*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[2]) +template `xz=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[2] = y +template xw*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[3]) +template `xw=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[3] = y +template yx*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[0]) +template `yx=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[0] = y +template yy*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[1]) +template `yy=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[1] = y +template yz*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[2]) +template `yz=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[2] = y +template yw*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[3]) +template `yw=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[3] = y +template zx*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[0]) +template `zx=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[0] = y +template zy*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[1]) +template `zy=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[1] = y +template zz*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[2]) +template `zz=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[2] = y +template zw*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[3]) +template `zw=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[3] = y +template wx*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[0]) +template `wx=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[0] = y +template wy*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[1]) +template `wy=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[1] = y +template wz*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[2]) +template `wz=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[2] = y +template ww*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[3]) +template `ww=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[3] = y + +# 2 x rgba +template rr*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[0]) +template `rr=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[0] = y +template rg*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[1]) +template `rg=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[1] = y +template rb*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[2]) +template `rb=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[2] = y +template ra*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[3]) +template `ra=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[3] = y +template gr*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[0]) +template `gr=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[0] = y +template gg*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[1]) +template `gg=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[1] = y +template gb*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[2]) +template `gb=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[2] = y +template ga*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[3]) +template `ga=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[3] = y +template br*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[0]) +template `br=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[0] = y +template bg*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[1]) +template `bg=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[1] = y +template bb*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[2]) +template `bb=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[2] = y +template ba*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[3]) +template `ba=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[3] = y +template ar*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[0]) +template `ar=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[0] = y +template ag*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[1]) +template `ag=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[1] = y +template ab*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[2]) +template `ab=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[2] = y +template aa*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[3]) +template `aa=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[3] = y + +# 2 x stpq +template ss*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[0]) +template `ss=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[0] = y +template st*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[1]) +template `st=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[1] = y +template sp*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[2]) +template `sp=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[2] = y +template sq*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[0], a[3]) +template `sq=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[00] = x; a[3] = y +template ts*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[0]) +template `ts=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[0] = y +template tt*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[1]) +template `tt=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[1] = y +template tp*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[2]) +template `tp=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[2] = y +template tq*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[1], a[3]) +template `tq=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[01] = x; a[3] = y +template ps*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[0]) +template `ps=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[0] = y +template pt*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[1]) +template `pt=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[1] = y +template pp*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[2]) +template `pp=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[2] = y +template pq*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[2], a[3]) +template `pq=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[02] = x; a[3] = y +template qs*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[0]) +template `qs=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[0] = y +template qt*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[1]) +template `qt=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[1] = y +template qp*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[2]) +template `qp=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[2] = y +template qq*[T](a: GVec234[T]): GVec2[T] = + gvec2(a[3], a[3]) +template `qq=`*[T](a: var GVec234[T], b: GVec2[T]) = + let x = b.x; let y = b.y + a[03] = x; a[3] = y + +# 3 x xyzw +template xxx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[0]) +template `xxx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[0] = z +template xxy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[1]) +template `xxy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[1] = z +template xxz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[2]) +template `xxz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[2] = z +template xxw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[3]) +template `xxw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[3] = z +template xyx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[0]) +template `xyx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[0] = z +template xyy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[1]) +template `xyy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[1] = z +template xyz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[2]) +template `xyz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[2] = z +template xyw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[3]) +template `xyw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[3] = z +template xzx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[0]) +template `xzx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[0] = z +template xzy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[1]) +template `xzy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[1] = z +template xzz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[2]) +template `xzz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[2] = z +template xzw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[3]) +template `xzw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[3] = z +template xwx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[0]) +template `xwx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[0] = z +template xwy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[1]) +template `xwy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[1] = z +template xwz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[2]) +template `xwz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[2] = z +template xww*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[3]) +template `xww=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[3] = z +template yxx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[0]) +template `yxx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[0] = z +template yxy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[1]) +template `yxy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[1] = z +template yxz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[2]) +template `yxz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[2] = z +template yxw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[3]) +template `yxw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[3] = z +template yyx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[0]) +template `yyx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[0] = z +template yyy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[1]) +template `yyy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[1] = z +template yyz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[2]) +template `yyz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[2] = z +template yyw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[3]) +template `yyw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[3] = z +template yzx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[0]) +template `yzx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[0] = z +template yzy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[1]) +template `yzy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[1] = z +template yzz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[2]) +template `yzz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[2] = z +template yzw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[3]) +template `yzw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[3] = z +template ywx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[0]) +template `ywx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[0] = z +template ywy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[1]) +template `ywy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[1] = z +template ywz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[2]) +template `ywz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[2] = z +template yww*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[3]) +template `yww=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[3] = z +template zxx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[0]) +template `zxx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[0] = z +template zxy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[1]) +template `zxy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[1] = z +template zxz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[2]) +template `zxz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[2] = z +template zxw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[3]) +template `zxw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[3] = z +template zyx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[0]) +template `zyx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[0] = z +template zyy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[1]) +template `zyy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[1] = z +template zyz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[2]) +template `zyz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[2] = z +template zyw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[3]) +template `zyw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[3] = z +template zzx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[0]) +template `zzx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[0] = z +template zzy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[1]) +template `zzy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[1] = z +template zzz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[2]) +template `zzz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[2] = z +template zzw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[3]) +template `zzw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[3] = z +template zwx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[0]) +template `zwx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[0] = z +template zwy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[1]) +template `zwy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[1] = z +template zwz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[2]) +template `zwz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[2] = z +template zww*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[3]) +template `zww=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[3] = z +template wxx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[0]) +template `wxx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[0] = z +template wxy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[1]) +template `wxy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[1] = z +template wxz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[2]) +template `wxz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[2] = z +template wxw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[3]) +template `wxw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[3] = z +template wyx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[0]) +template `wyx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[0] = z +template wyy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[1]) +template `wyy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[1] = z +template wyz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[2]) +template `wyz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[2] = z +template wyw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[3]) +template `wyw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[3] = z +template wzx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[0]) +template `wzx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[0] = z +template wzy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[1]) +template `wzy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[1] = z +template wzz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[2]) +template `wzz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[2] = z +template wzw*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[3]) +template `wzw=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[3] = z +template wwx*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[0]) +template `wwx=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[0] = z +template wwy*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[1]) +template `wwy=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[1] = z +template wwz*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[2]) +template `wwz=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[2] = z +template www*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[3]) +template `www=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[3] = z + +# 3 x rgba +template rrr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[0]) +template `rrr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[0] = z +template rrg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[1]) +template `rrg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[1] = z +template rrb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[2]) +template `rrb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[2] = z +template rra*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[3]) +template `rra=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[3] = z +template rgr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[0]) +template `rgr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[0] = z +template rgg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[1]) +template `rgg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[1] = z +template rgb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[2]) +template `rgb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[2] = z +template rga*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[3]) +template `rga=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[3] = z +template rbr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[0]) +template `rbr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[0] = z +template rbg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[1]) +template `rbg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[1] = z +template rbb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[2]) +template `rbb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[2] = z +template rba*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[3]) +template `rba=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[3] = z +template rar*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[0]) +template `rar=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[0] = z +template rag*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[1]) +template `rag=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[1] = z +template rab*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[2]) +template `rab=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[2] = z +template raa*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[3]) +template `raa=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[3] = z +template grr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[0]) +template `grr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[0] = z +template grg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[1]) +template `grg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[1] = z +template grb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[2]) +template `grb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[2] = z +template gra*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[3]) +template `gra=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[3] = z +template ggr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[0]) +template `ggr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[0] = z +template ggg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[1]) +template `ggg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[1] = z +template ggb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[2]) +template `ggb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[2] = z +template gga*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[3]) +template `gga=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[3] = z +template gbr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[0]) +template `gbr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[0] = z +template gbg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[1]) +template `gbg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[1] = z +template gbb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[2]) +template `gbb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[2] = z +template gba*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[3]) +template `gba=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[3] = z +template gar*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[0]) +template `gar=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[0] = z +template gag*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[1]) +template `gag=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[1] = z +template gab*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[2]) +template `gab=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[2] = z +template gaa*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[3]) +template `gaa=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[3] = z +template brr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[0]) +template `brr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[0] = z +template brg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[1]) +template `brg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[1] = z +template brb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[2]) +template `brb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[2] = z +template bra*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[3]) +template `bra=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[3] = z +template bgr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[0]) +template `bgr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[0] = z +template bgg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[1]) +template `bgg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[1] = z +template bgb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[2]) +template `bgb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[2] = z +template bga*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[3]) +template `bga=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[3] = z +template bbr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[0]) +template `bbr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[0] = z +template bbg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[1]) +template `bbg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[1] = z +template bbb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[2]) +template `bbb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[2] = z +template bba*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[3]) +template `bba=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[3] = z +template bar*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[0]) +template `bar=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[0] = z +template bag*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[1]) +template `bag=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[1] = z +template bab*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[2]) +template `bab=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[2] = z +template baa*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[3]) +template `baa=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[3] = z +template arr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[0]) +template `arr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[0] = z +template arg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[1]) +template `arg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[1] = z +template arb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[2]) +template `arb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[2] = z +template ara*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[3]) +template `ara=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[3] = z +template agr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[0]) +template `agr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[0] = z +template agg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[1]) +template `agg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[1] = z +template agb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[2]) +template `agb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[2] = z +template aga*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[3]) +template `aga=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[3] = z +template abr*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[0]) +template `abr=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[0] = z +template abg*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[1]) +template `abg=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[1] = z +template abb*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[2]) +template `abb=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[2] = z +template aba*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[3]) +template `aba=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[3] = z +template aar*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[0]) +template `aar=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[0] = z +template aag*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[1]) +template `aag=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[1] = z +template aab*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[2]) +template `aab=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[2] = z +template aaa*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[3]) +template `aaa=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[3] = z + +# 3 x stpq +template sss*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[0]) +template `sss=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[0] = z +template sst*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[1]) +template `sst=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[1] = z +template ssp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[2]) +template `ssp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[2] = z +template ssq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[0], a[3]) +template `ssq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[0] = y; a[3] = z +template sts*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[0]) +template `sts=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[0] = z +template stt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[1]) +template `stt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[1] = z +template stp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[2]) +template `stp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[2] = z +template stq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[1], a[3]) +template `stq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[1] = y; a[3] = z +template sps*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[0]) +template `sps=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[0] = z +template spt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[1]) +template `spt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[1] = z +template spp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[2]) +template `spp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[2] = z +template spq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[2], a[3]) +template `spq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[2] = y; a[3] = z +template sqs*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[0]) +template `sqs=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[0] = z +template sqt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[1]) +template `sqt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[1] = z +template sqp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[2]) +template `sqp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[2] = z +template sqq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[0], a[3], a[3]) +template `sqq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[0] = x; a[3] = y; a[3] = z +template tss*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[0]) +template `tss=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[0] = z +template tst*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[1]) +template `tst=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[1] = z +template tsp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[2]) +template `tsp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[2] = z +template tsq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[0], a[3]) +template `tsq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[0] = y; a[3] = z +template tts*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[0]) +template `tts=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[0] = z +template ttt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[1]) +template `ttt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[1] = z +template ttp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[2]) +template `ttp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[2] = z +template ttq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[1], a[3]) +template `ttq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[1] = y; a[3] = z +template tps*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[0]) +template `tps=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[0] = z +template tpt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[1]) +template `tpt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[1] = z +template tpp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[2]) +template `tpp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[2] = z +template tpq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[2], a[3]) +template `tpq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[2] = y; a[3] = z +template tqs*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[0]) +template `tqs=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[0] = z +template tqt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[1]) +template `tqt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[1] = z +template tqp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[2]) +template `tqp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[2] = z +template tqq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[1], a[3], a[3]) +template `tqq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[1] = x; a[3] = y; a[3] = z +template pss*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[0]) +template `pss=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[0] = z +template pst*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[1]) +template `pst=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[1] = z +template psp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[2]) +template `psp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[2] = z +template psq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[0], a[3]) +template `psq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[0] = y; a[3] = z +template pts*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[0]) +template `pts=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[0] = z +template ptt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[1]) +template `ptt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[1] = z +template ptp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[2]) +template `ptp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[2] = z +template ptq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[1], a[3]) +template `ptq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[1] = y; a[3] = z +template pps*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[0]) +template `pps=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[0] = z +template ppt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[1]) +template `ppt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[1] = z +template ppp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[2]) +template `ppp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[2] = z +template ppq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[2], a[3]) +template `ppq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[2] = y; a[3] = z +template pqs*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[0]) +template `pqs=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[0] = z +template pqt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[1]) +template `pqt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[1] = z +template pqp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[2]) +template `pqp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[2] = z +template pqq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[2], a[3], a[3]) +template `pqq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[2] = x; a[3] = y; a[3] = z +template qss*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[0]) +template `qss=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[0] = z +template qst*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[1]) +template `qst=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[1] = z +template qsp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[2]) +template `qsp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[2] = z +template qsq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[0], a[3]) +template `qsq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[0] = y; a[3] = z +template qts*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[0]) +template `qts=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[0] = z +template qtt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[1]) +template `qtt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[1] = z +template qtp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[2]) +template `qtp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[2] = z +template qtq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[1], a[3]) +template `qtq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[1] = y; a[3] = z +template qps*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[0]) +template `qps=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[0] = z +template qpt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[1]) +template `qpt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[1] = z +template qpp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[2]) +template `qpp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[2] = z +template qpq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[2], a[3]) +template `qpq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[2] = y; a[3] = z +template qqs*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[0]) +template `qqs=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[0] = z +template qqt*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[1]) +template `qqt=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[1] = z +template qqp*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[2]) +template `qqp=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[2] = z +template qqq*[T](a: GVec234[T]): GVec3[T] = + gvec3(a[3], a[3], a[3]) +template `qqq=`*[T](a: var GVec234[T], b: GVec3[T]) = + let x = b.x; let y = b.y; let z = b.z + a[3] = x; a[3] = y; a[3] = z + +# 4 x xyzw +template xxxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[0]) +template `xxxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[0] = w +template xxxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[1]) +template `xxxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[1] = w +template xxxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[2]) +template `xxxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[2] = w +template xxxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[3]) +template `xxxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[3] = w +template xxyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[0]) +template `xxyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[0] = w +template xxyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[1]) +template `xxyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[1] = w +template xxyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[2]) +template `xxyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[2] = w +template xxyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[3]) +template `xxyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[3] = w +template xxzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[0]) +template `xxzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[0] = w +template xxzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[1]) +template `xxzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[1] = w +template xxzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[2]) +template `xxzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[2] = w +template xxzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[3]) +template `xxzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[3] = w +template xxwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[0]) +template `xxwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[0] = w +template xxwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[1]) +template `xxwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[1] = w +template xxwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[2]) +template `xxwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[2] = w +template xxww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[3]) +template `xxww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[3] = w +template xyxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[0]) +template `xyxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[0] = w +template xyxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[1]) +template `xyxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[1] = w +template xyxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[2]) +template `xyxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[2] = w +template xyxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[3]) +template `xyxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[3] = w +template xyyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[0]) +template `xyyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[0] = w +template xyyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[1]) +template `xyyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[1] = w +template xyyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[2]) +template `xyyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[2] = w +template xyyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[3]) +template `xyyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[3] = w +template xyzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[0]) +template `xyzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[0] = w +template xyzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[1]) +template `xyzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[1] = w +template xyzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[2]) +template `xyzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[2] = w +template xyzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[3]) +template `xyzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[3] = w +template xywx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[0]) +template `xywx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[0] = w +template xywy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[1]) +template `xywy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[1] = w +template xywz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[2]) +template `xywz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[2] = w +template xyww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[3]) +template `xyww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[3] = w +template xzxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[0]) +template `xzxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[0] = w +template xzxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[1]) +template `xzxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[1] = w +template xzxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[2]) +template `xzxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[2] = w +template xzxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[3]) +template `xzxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[3] = w +template xzyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[0]) +template `xzyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[0] = w +template xzyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[1]) +template `xzyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[1] = w +template xzyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[2]) +template `xzyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[2] = w +template xzyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[3]) +template `xzyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[3] = w +template xzzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[0]) +template `xzzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[0] = w +template xzzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[1]) +template `xzzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[1] = w +template xzzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[2]) +template `xzzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[2] = w +template xzzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[3]) +template `xzzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[3] = w +template xzwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[0]) +template `xzwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[0] = w +template xzwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[1]) +template `xzwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[1] = w +template xzwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[2]) +template `xzwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[2] = w +template xzww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[3]) +template `xzww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[3] = w +template xwxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[0]) +template `xwxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[0] = w +template xwxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[1]) +template `xwxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[1] = w +template xwxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[2]) +template `xwxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[2] = w +template xwxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[3]) +template `xwxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[3] = w +template xwyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[0]) +template `xwyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[0] = w +template xwyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[1]) +template `xwyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[1] = w +template xwyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[2]) +template `xwyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[2] = w +template xwyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[3]) +template `xwyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[3] = w +template xwzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[0]) +template `xwzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[0] = w +template xwzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[1]) +template `xwzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[1] = w +template xwzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[2]) +template `xwzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[2] = w +template xwzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[3]) +template `xwzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[3] = w +template xwwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[0]) +template `xwwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[0] = w +template xwwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[1]) +template `xwwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[1] = w +template xwwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[2]) +template `xwwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[2] = w +template xwww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[3]) +template `xwww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[3] = w +template yxxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[0]) +template `yxxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[0] = w +template yxxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[1]) +template `yxxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[1] = w +template yxxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[2]) +template `yxxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[2] = w +template yxxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[3]) +template `yxxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[3] = w +template yxyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[0]) +template `yxyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[0] = w +template yxyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[1]) +template `yxyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[1] = w +template yxyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[2]) +template `yxyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[2] = w +template yxyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[3]) +template `yxyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[3] = w +template yxzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[0]) +template `yxzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[0] = w +template yxzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[1]) +template `yxzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[1] = w +template yxzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[2]) +template `yxzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[2] = w +template yxzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[3]) +template `yxzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[3] = w +template yxwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[0]) +template `yxwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[0] = w +template yxwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[1]) +template `yxwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[1] = w +template yxwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[2]) +template `yxwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[2] = w +template yxww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[3]) +template `yxww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[3] = w +template yyxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[0]) +template `yyxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[0] = w +template yyxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[1]) +template `yyxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[1] = w +template yyxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[2]) +template `yyxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[2] = w +template yyxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[3]) +template `yyxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[3] = w +template yyyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[0]) +template `yyyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[0] = w +template yyyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[1]) +template `yyyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[1] = w +template yyyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[2]) +template `yyyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[2] = w +template yyyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[3]) +template `yyyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[3] = w +template yyzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[0]) +template `yyzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[0] = w +template yyzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[1]) +template `yyzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[1] = w +template yyzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[2]) +template `yyzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[2] = w +template yyzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[3]) +template `yyzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[3] = w +template yywx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[0]) +template `yywx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[0] = w +template yywy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[1]) +template `yywy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[1] = w +template yywz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[2]) +template `yywz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[2] = w +template yyww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[3]) +template `yyww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[3] = w +template yzxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[0]) +template `yzxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[0] = w +template yzxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[1]) +template `yzxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[1] = w +template yzxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[2]) +template `yzxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[2] = w +template yzxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[3]) +template `yzxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[3] = w +template yzyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[0]) +template `yzyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[0] = w +template yzyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[1]) +template `yzyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[1] = w +template yzyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[2]) +template `yzyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[2] = w +template yzyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[3]) +template `yzyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[3] = w +template yzzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[0]) +template `yzzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[0] = w +template yzzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[1]) +template `yzzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[1] = w +template yzzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[2]) +template `yzzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[2] = w +template yzzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[3]) +template `yzzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[3] = w +template yzwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[0]) +template `yzwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[0] = w +template yzwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[1]) +template `yzwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[1] = w +template yzwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[2]) +template `yzwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[2] = w +template yzww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[3]) +template `yzww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[3] = w +template ywxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[0]) +template `ywxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[0] = w +template ywxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[1]) +template `ywxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[1] = w +template ywxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[2]) +template `ywxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[2] = w +template ywxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[3]) +template `ywxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[3] = w +template ywyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[0]) +template `ywyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[0] = w +template ywyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[1]) +template `ywyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[1] = w +template ywyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[2]) +template `ywyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[2] = w +template ywyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[3]) +template `ywyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[3] = w +template ywzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[0]) +template `ywzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[0] = w +template ywzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[1]) +template `ywzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[1] = w +template ywzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[2]) +template `ywzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[2] = w +template ywzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[3]) +template `ywzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[3] = w +template ywwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[0]) +template `ywwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[0] = w +template ywwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[1]) +template `ywwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[1] = w +template ywwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[2]) +template `ywwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[2] = w +template ywww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[3]) +template `ywww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[3] = w +template zxxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[0]) +template `zxxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[0] = w +template zxxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[1]) +template `zxxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[1] = w +template zxxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[2]) +template `zxxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[2] = w +template zxxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[3]) +template `zxxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[3] = w +template zxyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[0]) +template `zxyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[0] = w +template zxyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[1]) +template `zxyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[1] = w +template zxyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[2]) +template `zxyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[2] = w +template zxyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[3]) +template `zxyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[3] = w +template zxzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[0]) +template `zxzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[0] = w +template zxzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[1]) +template `zxzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[1] = w +template zxzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[2]) +template `zxzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[2] = w +template zxzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[3]) +template `zxzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[3] = w +template zxwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[0]) +template `zxwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[0] = w +template zxwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[1]) +template `zxwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[1] = w +template zxwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[2]) +template `zxwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[2] = w +template zxww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[3]) +template `zxww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[3] = w +template zyxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[0]) +template `zyxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[0] = w +template zyxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[1]) +template `zyxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[1] = w +template zyxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[2]) +template `zyxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[2] = w +template zyxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[3]) +template `zyxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[3] = w +template zyyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[0]) +template `zyyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[0] = w +template zyyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[1]) +template `zyyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[1] = w +template zyyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[2]) +template `zyyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[2] = w +template zyyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[3]) +template `zyyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[3] = w +template zyzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[0]) +template `zyzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[0] = w +template zyzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[1]) +template `zyzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[1] = w +template zyzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[2]) +template `zyzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[2] = w +template zyzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[3]) +template `zyzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[3] = w +template zywx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[0]) +template `zywx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[0] = w +template zywy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[1]) +template `zywy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[1] = w +template zywz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[2]) +template `zywz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[2] = w +template zyww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[3]) +template `zyww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[3] = w +template zzxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[0]) +template `zzxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[0] = w +template zzxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[1]) +template `zzxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[1] = w +template zzxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[2]) +template `zzxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[2] = w +template zzxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[3]) +template `zzxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[3] = w +template zzyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[0]) +template `zzyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[0] = w +template zzyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[1]) +template `zzyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[1] = w +template zzyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[2]) +template `zzyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[2] = w +template zzyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[3]) +template `zzyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[3] = w +template zzzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[0]) +template `zzzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[0] = w +template zzzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[1]) +template `zzzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[1] = w +template zzzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[2]) +template `zzzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[2] = w +template zzzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[3]) +template `zzzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[3] = w +template zzwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[0]) +template `zzwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[0] = w +template zzwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[1]) +template `zzwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[1] = w +template zzwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[2]) +template `zzwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[2] = w +template zzww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[3]) +template `zzww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[3] = w +template zwxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[0]) +template `zwxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[0] = w +template zwxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[1]) +template `zwxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[1] = w +template zwxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[2]) +template `zwxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[2] = w +template zwxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[3]) +template `zwxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[3] = w +template zwyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[0]) +template `zwyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[0] = w +template zwyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[1]) +template `zwyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[1] = w +template zwyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[2]) +template `zwyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[2] = w +template zwyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[3]) +template `zwyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[3] = w +template zwzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[0]) +template `zwzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[0] = w +template zwzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[1]) +template `zwzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[1] = w +template zwzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[2]) +template `zwzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[2] = w +template zwzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[3]) +template `zwzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[3] = w +template zwwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[0]) +template `zwwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[0] = w +template zwwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[1]) +template `zwwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[1] = w +template zwwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[2]) +template `zwwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[2] = w +template zwww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[3]) +template `zwww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[3] = w +template wxxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[0]) +template `wxxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[0] = w +template wxxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[1]) +template `wxxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[1] = w +template wxxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[2]) +template `wxxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[2] = w +template wxxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[3]) +template `wxxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[3] = w +template wxyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[0]) +template `wxyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[0] = w +template wxyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[1]) +template `wxyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[1] = w +template wxyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[2]) +template `wxyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[2] = w +template wxyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[3]) +template `wxyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[3] = w +template wxzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[0]) +template `wxzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[0] = w +template wxzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[1]) +template `wxzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[1] = w +template wxzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[2]) +template `wxzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[2] = w +template wxzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[3]) +template `wxzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[3] = w +template wxwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[0]) +template `wxwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[0] = w +template wxwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[1]) +template `wxwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[1] = w +template wxwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[2]) +template `wxwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[2] = w +template wxww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[3]) +template `wxww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[3] = w +template wyxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[0]) +template `wyxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[0] = w +template wyxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[1]) +template `wyxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[1] = w +template wyxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[2]) +template `wyxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[2] = w +template wyxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[3]) +template `wyxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[3] = w +template wyyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[0]) +template `wyyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[0] = w +template wyyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[1]) +template `wyyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[1] = w +template wyyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[2]) +template `wyyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[2] = w +template wyyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[3]) +template `wyyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[3] = w +template wyzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[0]) +template `wyzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[0] = w +template wyzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[1]) +template `wyzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[1] = w +template wyzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[2]) +template `wyzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[2] = w +template wyzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[3]) +template `wyzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[3] = w +template wywx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[0]) +template `wywx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[0] = w +template wywy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[1]) +template `wywy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[1] = w +template wywz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[2]) +template `wywz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[2] = w +template wyww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[3]) +template `wyww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[3] = w +template wzxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[0]) +template `wzxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[0] = w +template wzxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[1]) +template `wzxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[1] = w +template wzxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[2]) +template `wzxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[2] = w +template wzxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[3]) +template `wzxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[3] = w +template wzyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[0]) +template `wzyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[0] = w +template wzyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[1]) +template `wzyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[1] = w +template wzyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[2]) +template `wzyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[2] = w +template wzyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[3]) +template `wzyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[3] = w +template wzzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[0]) +template `wzzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[0] = w +template wzzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[1]) +template `wzzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[1] = w +template wzzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[2]) +template `wzzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[2] = w +template wzzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[3]) +template `wzzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[3] = w +template wzwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[0]) +template `wzwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[0] = w +template wzwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[1]) +template `wzwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[1] = w +template wzwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[2]) +template `wzwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[2] = w +template wzww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[3]) +template `wzww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[3] = w +template wwxx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[0]) +template `wwxx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[0] = w +template wwxy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[1]) +template `wwxy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[1] = w +template wwxz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[2]) +template `wwxz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[2] = w +template wwxw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[3]) +template `wwxw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[3] = w +template wwyx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[0]) +template `wwyx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[0] = w +template wwyy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[1]) +template `wwyy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[1] = w +template wwyz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[2]) +template `wwyz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[2] = w +template wwyw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[3]) +template `wwyw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[3] = w +template wwzx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[0]) +template `wwzx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[0] = w +template wwzy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[1]) +template `wwzy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[1] = w +template wwzz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[2]) +template `wwzz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[2] = w +template wwzw*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[3]) +template `wwzw=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[3] = w +template wwwx*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[0]) +template `wwwx=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[0] = w +template wwwy*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[1]) +template `wwwy=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[1] = w +template wwwz*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[2]) +template `wwwz=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[2] = w +template wwww*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[3]) +template `wwww=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[3] = w + +# 4 x rgba +template rrrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[0]) +template `rrrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[0] = w +template rrrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[1]) +template `rrrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[1] = w +template rrrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[2]) +template `rrrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[2] = w +template rrra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[3]) +template `rrra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[3] = w +template rrgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[0]) +template `rrgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[0] = w +template rrgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[1]) +template `rrgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[1] = w +template rrgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[2]) +template `rrgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[2] = w +template rrga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[3]) +template `rrga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[3] = w +template rrbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[0]) +template `rrbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[0] = w +template rrbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[1]) +template `rrbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[1] = w +template rrbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[2]) +template `rrbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[2] = w +template rrba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[3]) +template `rrba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[3] = w +template rrar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[0]) +template `rrar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[0] = w +template rrag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[1]) +template `rrag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[1] = w +template rrab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[2]) +template `rrab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[2] = w +template rraa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[3]) +template `rraa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[3] = w +template rgrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[0]) +template `rgrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[0] = w +template rgrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[1]) +template `rgrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[1] = w +template rgrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[2]) +template `rgrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[2] = w +template rgra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[3]) +template `rgra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[3] = w +template rggr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[0]) +template `rggr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[0] = w +template rggg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[1]) +template `rggg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[1] = w +template rggb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[2]) +template `rggb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[2] = w +template rgga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[3]) +template `rgga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[3] = w +template rgbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[0]) +template `rgbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[0] = w +template rgbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[1]) +template `rgbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[1] = w +template rgbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[2]) +template `rgbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[2] = w +template rgba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[3]) +template `rgba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[3] = w +template rgar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[0]) +template `rgar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[0] = w +template rgag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[1]) +template `rgag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[1] = w +template rgab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[2]) +template `rgab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[2] = w +template rgaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[3]) +template `rgaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[3] = w +template rbrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[0]) +template `rbrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[0] = w +template rbrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[1]) +template `rbrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[1] = w +template rbrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[2]) +template `rbrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[2] = w +template rbra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[3]) +template `rbra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[3] = w +template rbgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[0]) +template `rbgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[0] = w +template rbgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[1]) +template `rbgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[1] = w +template rbgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[2]) +template `rbgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[2] = w +template rbga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[3]) +template `rbga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[3] = w +template rbbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[0]) +template `rbbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[0] = w +template rbbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[1]) +template `rbbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[1] = w +template rbbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[2]) +template `rbbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[2] = w +template rbba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[3]) +template `rbba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[3] = w +template rbar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[0]) +template `rbar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[0] = w +template rbag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[1]) +template `rbag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[1] = w +template rbab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[2]) +template `rbab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[2] = w +template rbaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[3]) +template `rbaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[3] = w +template rarr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[0]) +template `rarr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[0] = w +template rarg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[1]) +template `rarg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[1] = w +template rarb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[2]) +template `rarb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[2] = w +template rara*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[3]) +template `rara=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[3] = w +template ragr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[0]) +template `ragr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[0] = w +template ragg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[1]) +template `ragg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[1] = w +template ragb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[2]) +template `ragb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[2] = w +template raga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[3]) +template `raga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[3] = w +template rabr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[0]) +template `rabr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[0] = w +template rabg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[1]) +template `rabg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[1] = w +template rabb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[2]) +template `rabb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[2] = w +template raba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[3]) +template `raba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[3] = w +template raar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[0]) +template `raar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[0] = w +template raag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[1]) +template `raag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[1] = w +template raab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[2]) +template `raab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[2] = w +template raaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[3]) +template `raaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[3] = w +template grrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[0]) +template `grrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[0] = w +template grrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[1]) +template `grrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[1] = w +template grrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[2]) +template `grrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[2] = w +template grra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[3]) +template `grra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[3] = w +template grgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[0]) +template `grgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[0] = w +template grgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[1]) +template `grgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[1] = w +template grgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[2]) +template `grgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[2] = w +template grga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[3]) +template `grga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[3] = w +template grbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[0]) +template `grbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[0] = w +template grbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[1]) +template `grbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[1] = w +template grbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[2]) +template `grbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[2] = w +template grba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[3]) +template `grba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[3] = w +template grar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[0]) +template `grar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[0] = w +template grag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[1]) +template `grag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[1] = w +template grab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[2]) +template `grab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[2] = w +template graa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[3]) +template `graa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[3] = w +template ggrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[0]) +template `ggrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[0] = w +template ggrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[1]) +template `ggrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[1] = w +template ggrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[2]) +template `ggrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[2] = w +template ggra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[3]) +template `ggra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[3] = w +template gggr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[0]) +template `gggr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[0] = w +template gggg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[1]) +template `gggg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[1] = w +template gggb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[2]) +template `gggb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[2] = w +template ggga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[3]) +template `ggga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[3] = w +template ggbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[0]) +template `ggbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[0] = w +template ggbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[1]) +template `ggbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[1] = w +template ggbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[2]) +template `ggbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[2] = w +template ggba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[3]) +template `ggba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[3] = w +template ggar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[0]) +template `ggar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[0] = w +template ggag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[1]) +template `ggag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[1] = w +template ggab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[2]) +template `ggab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[2] = w +template ggaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[3]) +template `ggaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[3] = w +template gbrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[0]) +template `gbrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[0] = w +template gbrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[1]) +template `gbrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[1] = w +template gbrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[2]) +template `gbrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[2] = w +template gbra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[3]) +template `gbra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[3] = w +template gbgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[0]) +template `gbgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[0] = w +template gbgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[1]) +template `gbgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[1] = w +template gbgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[2]) +template `gbgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[2] = w +template gbga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[3]) +template `gbga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[3] = w +template gbbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[0]) +template `gbbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[0] = w +template gbbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[1]) +template `gbbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[1] = w +template gbbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[2]) +template `gbbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[2] = w +template gbba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[3]) +template `gbba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[3] = w +template gbar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[0]) +template `gbar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[0] = w +template gbag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[1]) +template `gbag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[1] = w +template gbab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[2]) +template `gbab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[2] = w +template gbaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[3]) +template `gbaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[3] = w +template garr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[0]) +template `garr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[0] = w +template garg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[1]) +template `garg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[1] = w +template garb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[2]) +template `garb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[2] = w +template gara*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[3]) +template `gara=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[3] = w +template gagr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[0]) +template `gagr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[0] = w +template gagg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[1]) +template `gagg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[1] = w +template gagb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[2]) +template `gagb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[2] = w +template gaga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[3]) +template `gaga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[3] = w +template gabr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[0]) +template `gabr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[0] = w +template gabg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[1]) +template `gabg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[1] = w +template gabb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[2]) +template `gabb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[2] = w +template gaba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[3]) +template `gaba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[3] = w +template gaar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[0]) +template `gaar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[0] = w +template gaag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[1]) +template `gaag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[1] = w +template gaab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[2]) +template `gaab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[2] = w +template gaaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[3]) +template `gaaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[3] = w +template brrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[0]) +template `brrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[0] = w +template brrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[1]) +template `brrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[1] = w +template brrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[2]) +template `brrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[2] = w +template brra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[3]) +template `brra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[3] = w +template brgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[0]) +template `brgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[0] = w +template brgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[1]) +template `brgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[1] = w +template brgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[2]) +template `brgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[2] = w +template brga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[3]) +template `brga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[3] = w +template brbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[0]) +template `brbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[0] = w +template brbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[1]) +template `brbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[1] = w +template brbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[2]) +template `brbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[2] = w +template brba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[3]) +template `brba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[3] = w +template brar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[0]) +template `brar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[0] = w +template brag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[1]) +template `brag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[1] = w +template brab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[2]) +template `brab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[2] = w +template braa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[3]) +template `braa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[3] = w +template bgrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[0]) +template `bgrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[0] = w +template bgrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[1]) +template `bgrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[1] = w +template bgrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[2]) +template `bgrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[2] = w +template bgra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[3]) +template `bgra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[3] = w +template bggr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[0]) +template `bggr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[0] = w +template bggg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[1]) +template `bggg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[1] = w +template bggb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[2]) +template `bggb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[2] = w +template bgga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[3]) +template `bgga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[3] = w +template bgbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[0]) +template `bgbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[0] = w +template bgbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[1]) +template `bgbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[1] = w +template bgbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[2]) +template `bgbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[2] = w +template bgba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[3]) +template `bgba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[3] = w +template bgar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[0]) +template `bgar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[0] = w +template bgag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[1]) +template `bgag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[1] = w +template bgab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[2]) +template `bgab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[2] = w +template bgaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[3]) +template `bgaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[3] = w +template bbrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[0]) +template `bbrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[0] = w +template bbrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[1]) +template `bbrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[1] = w +template bbrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[2]) +template `bbrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[2] = w +template bbra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[3]) +template `bbra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[3] = w +template bbgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[0]) +template `bbgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[0] = w +template bbgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[1]) +template `bbgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[1] = w +template bbgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[2]) +template `bbgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[2] = w +template bbga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[3]) +template `bbga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[3] = w +template bbbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[0]) +template `bbbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[0] = w +template bbbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[1]) +template `bbbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[1] = w +template bbbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[2]) +template `bbbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[2] = w +template bbba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[3]) +template `bbba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[3] = w +template bbar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[0]) +template `bbar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[0] = w +template bbag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[1]) +template `bbag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[1] = w +template bbab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[2]) +template `bbab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[2] = w +template bbaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[3]) +template `bbaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[3] = w +template barr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[0]) +template `barr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[0] = w +template barg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[1]) +template `barg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[1] = w +template barb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[2]) +template `barb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[2] = w +template bara*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[3]) +template `bara=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[3] = w +template bagr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[0]) +template `bagr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[0] = w +template bagg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[1]) +template `bagg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[1] = w +template bagb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[2]) +template `bagb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[2] = w +template baga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[3]) +template `baga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[3] = w +template babr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[0]) +template `babr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[0] = w +template babg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[1]) +template `babg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[1] = w +template babb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[2]) +template `babb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[2] = w +template baba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[3]) +template `baba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[3] = w +template baar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[0]) +template `baar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[0] = w +template baag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[1]) +template `baag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[1] = w +template baab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[2]) +template `baab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[2] = w +template baaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[3]) +template `baaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[3] = w +template arrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[0]) +template `arrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[0] = w +template arrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[1]) +template `arrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[1] = w +template arrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[2]) +template `arrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[2] = w +template arra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[3]) +template `arra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[3] = w +template argr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[0]) +template `argr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[0] = w +template argg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[1]) +template `argg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[1] = w +template argb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[2]) +template `argb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[2] = w +template arga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[3]) +template `arga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[3] = w +template arbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[0]) +template `arbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[0] = w +template arbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[1]) +template `arbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[1] = w +template arbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[2]) +template `arbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[2] = w +template arba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[3]) +template `arba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[3] = w +template arar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[0]) +template `arar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[0] = w +template arag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[1]) +template `arag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[1] = w +template arab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[2]) +template `arab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[2] = w +template araa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[3]) +template `araa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[3] = w +template agrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[0]) +template `agrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[0] = w +template agrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[1]) +template `agrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[1] = w +template agrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[2]) +template `agrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[2] = w +template agra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[3]) +template `agra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[3] = w +template aggr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[0]) +template `aggr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[0] = w +template aggg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[1]) +template `aggg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[1] = w +template aggb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[2]) +template `aggb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[2] = w +template agga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[3]) +template `agga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[3] = w +template agbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[0]) +template `agbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[0] = w +template agbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[1]) +template `agbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[1] = w +template agbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[2]) +template `agbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[2] = w +template agba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[3]) +template `agba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[3] = w +template agar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[0]) +template `agar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[0] = w +template agag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[1]) +template `agag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[1] = w +template agab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[2]) +template `agab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[2] = w +template agaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[3]) +template `agaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[3] = w +template abrr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[0]) +template `abrr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[0] = w +template abrg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[1]) +template `abrg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[1] = w +template abrb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[2]) +template `abrb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[2] = w +template abra*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[3]) +template `abra=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[3] = w +template abgr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[0]) +template `abgr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[0] = w +template abgg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[1]) +template `abgg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[1] = w +template abgb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[2]) +template `abgb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[2] = w +template abga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[3]) +template `abga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[3] = w +template abbr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[0]) +template `abbr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[0] = w +template abbg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[1]) +template `abbg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[1] = w +template abbb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[2]) +template `abbb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[2] = w +template abba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[3]) +template `abba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[3] = w +template abar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[0]) +template `abar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[0] = w +template abag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[1]) +template `abag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[1] = w +template abab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[2]) +template `abab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[2] = w +template abaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[3]) +template `abaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[3] = w +template aarr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[0]) +template `aarr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[0] = w +template aarg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[1]) +template `aarg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[1] = w +template aarb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[2]) +template `aarb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[2] = w +template aara*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[3]) +template `aara=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[3] = w +template aagr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[0]) +template `aagr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[0] = w +template aagg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[1]) +template `aagg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[1] = w +template aagb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[2]) +template `aagb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[2] = w +template aaga*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[3]) +template `aaga=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[3] = w +template aabr*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[0]) +template `aabr=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[0] = w +template aabg*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[1]) +template `aabg=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[1] = w +template aabb*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[2]) +template `aabb=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[2] = w +template aaba*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[3]) +template `aaba=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[3] = w +template aaar*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[0]) +template `aaar=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[0] = w +template aaag*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[1]) +template `aaag=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[1] = w +template aaab*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[2]) +template `aaab=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[2] = w +template aaaa*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[3]) +template `aaaa=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[3] = w + +# 4 x stpq +template ssss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[0]) +template `ssss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[0] = w +template ssst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[1]) +template `ssst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[1] = w +template sssp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[2]) +template `sssp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[2] = w +template sssq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[0], a[3]) +template `sssq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[0] = z; a[3] = w +template ssts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[0]) +template `ssts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[0] = w +template sstt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[1]) +template `sstt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[1] = w +template sstp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[2]) +template `sstp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[2] = w +template sstq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[1], a[3]) +template `sstq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[1] = z; a[3] = w +template ssps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[0]) +template `ssps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[0] = w +template sspt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[1]) +template `sspt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[1] = w +template sspp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[2]) +template `sspp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[2] = w +template sspq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[2], a[3]) +template `sspq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[2] = z; a[3] = w +template ssqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[0]) +template `ssqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[0] = w +template ssqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[1]) +template `ssqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[1] = w +template ssqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[2]) +template `ssqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[2] = w +template ssqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[0], a[3], a[3]) +template `ssqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[0] = y; a[3] = z; a[3] = w +template stss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[0]) +template `stss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[0] = w +template stst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[1]) +template `stst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[1] = w +template stsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[2]) +template `stsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[2] = w +template stsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[0], a[3]) +template `stsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[0] = z; a[3] = w +template stts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[0]) +template `stts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[0] = w +template sttt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[1]) +template `sttt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[1] = w +template sttp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[2]) +template `sttp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[2] = w +template sttq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[1], a[3]) +template `sttq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[1] = z; a[3] = w +template stps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[0]) +template `stps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[0] = w +template stpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[1]) +template `stpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[1] = w +template stpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[2]) +template `stpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[2] = w +template stpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[2], a[3]) +template `stpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[2] = z; a[3] = w +template stqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[0]) +template `stqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[0] = w +template stqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[1]) +template `stqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[1] = w +template stqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[2]) +template `stqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[2] = w +template stqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[1], a[3], a[3]) +template `stqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[1] = y; a[3] = z; a[3] = w +template spss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[0]) +template `spss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[0] = w +template spst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[1]) +template `spst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[1] = w +template spsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[2]) +template `spsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[2] = w +template spsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[0], a[3]) +template `spsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[0] = z; a[3] = w +template spts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[0]) +template `spts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[0] = w +template sptt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[1]) +template `sptt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[1] = w +template sptp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[2]) +template `sptp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[2] = w +template sptq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[1], a[3]) +template `sptq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[1] = z; a[3] = w +template spps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[0]) +template `spps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[0] = w +template sppt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[1]) +template `sppt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[1] = w +template sppp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[2]) +template `sppp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[2] = w +template sppq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[2], a[3]) +template `sppq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[2] = z; a[3] = w +template spqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[0]) +template `spqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[0] = w +template spqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[1]) +template `spqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[1] = w +template spqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[2]) +template `spqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[2] = w +template spqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[2], a[3], a[3]) +template `spqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[2] = y; a[3] = z; a[3] = w +template sqss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[0]) +template `sqss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[0] = w +template sqst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[1]) +template `sqst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[1] = w +template sqsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[2]) +template `sqsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[2] = w +template sqsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[0], a[3]) +template `sqsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[0] = z; a[3] = w +template sqts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[0]) +template `sqts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[0] = w +template sqtt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[1]) +template `sqtt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[1] = w +template sqtp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[2]) +template `sqtp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[2] = w +template sqtq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[1], a[3]) +template `sqtq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[1] = z; a[3] = w +template sqps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[0]) +template `sqps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[0] = w +template sqpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[1]) +template `sqpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[1] = w +template sqpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[2]) +template `sqpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[2] = w +template sqpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[2], a[3]) +template `sqpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[2] = z; a[3] = w +template sqqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[0]) +template `sqqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[0] = w +template sqqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[1]) +template `sqqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[1] = w +template sqqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[2]) +template `sqqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[2] = w +template sqqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [0], a[3], a[3], a[3]) +template `sqqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[0] = x; a[3] = y; a[3] = z; a[3] = w +template tsss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[0]) +template `tsss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[0] = w +template tsst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[1]) +template `tsst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[1] = w +template tssp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[2]) +template `tssp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[2] = w +template tssq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[0], a[3]) +template `tssq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[0] = z; a[3] = w +template tsts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[0]) +template `tsts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[0] = w +template tstt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[1]) +template `tstt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[1] = w +template tstp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[2]) +template `tstp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[2] = w +template tstq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[1], a[3]) +template `tstq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[1] = z; a[3] = w +template tsps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[0]) +template `tsps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[0] = w +template tspt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[1]) +template `tspt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[1] = w +template tspp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[2]) +template `tspp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[2] = w +template tspq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[2], a[3]) +template `tspq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[2] = z; a[3] = w +template tsqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[0]) +template `tsqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[0] = w +template tsqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[1]) +template `tsqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[1] = w +template tsqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[2]) +template `tsqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[2] = w +template tsqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[0], a[3], a[3]) +template `tsqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[0] = y; a[3] = z; a[3] = w +template ttss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[0]) +template `ttss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[0] = w +template ttst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[1]) +template `ttst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[1] = w +template ttsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[2]) +template `ttsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[2] = w +template ttsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[0], a[3]) +template `ttsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[0] = z; a[3] = w +template ttts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[0]) +template `ttts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[0] = w +template tttt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[1]) +template `tttt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[1] = w +template tttp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[2]) +template `tttp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[2] = w +template tttq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[1], a[3]) +template `tttq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[1] = z; a[3] = w +template ttps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[0]) +template `ttps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[0] = w +template ttpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[1]) +template `ttpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[1] = w +template ttpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[2]) +template `ttpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[2] = w +template ttpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[2], a[3]) +template `ttpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[2] = z; a[3] = w +template ttqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[0]) +template `ttqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[0] = w +template ttqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[1]) +template `ttqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[1] = w +template ttqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[2]) +template `ttqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[2] = w +template ttqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[1], a[3], a[3]) +template `ttqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[1] = y; a[3] = z; a[3] = w +template tpss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[0]) +template `tpss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[0] = w +template tpst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[1]) +template `tpst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[1] = w +template tpsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[2]) +template `tpsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[2] = w +template tpsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[0], a[3]) +template `tpsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[0] = z; a[3] = w +template tpts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[0]) +template `tpts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[0] = w +template tptt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[1]) +template `tptt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[1] = w +template tptp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[2]) +template `tptp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[2] = w +template tptq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[1], a[3]) +template `tptq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[1] = z; a[3] = w +template tpps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[0]) +template `tpps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[0] = w +template tppt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[1]) +template `tppt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[1] = w +template tppp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[2]) +template `tppp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[2] = w +template tppq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[2], a[3]) +template `tppq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[2] = z; a[3] = w +template tpqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[0]) +template `tpqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[0] = w +template tpqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[1]) +template `tpqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[1] = w +template tpqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[2]) +template `tpqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[2] = w +template tpqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[2], a[3], a[3]) +template `tpqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[2] = y; a[3] = z; a[3] = w +template tqss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[0]) +template `tqss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[0] = w +template tqst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[1]) +template `tqst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[1] = w +template tqsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[2]) +template `tqsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[2] = w +template tqsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[0], a[3]) +template `tqsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[0] = z; a[3] = w +template tqts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[0]) +template `tqts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[0] = w +template tqtt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[1]) +template `tqtt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[1] = w +template tqtp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[2]) +template `tqtp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[2] = w +template tqtq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[1], a[3]) +template `tqtq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[1] = z; a[3] = w +template tqps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[0]) +template `tqps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[0] = w +template tqpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[1]) +template `tqpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[1] = w +template tqpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[2]) +template `tqpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[2] = w +template tqpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[2], a[3]) +template `tqpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[2] = z; a[3] = w +template tqqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[0]) +template `tqqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[0] = w +template tqqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[1]) +template `tqqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[1] = w +template tqqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[2]) +template `tqqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[2] = w +template tqqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [1], a[3], a[3], a[3]) +template `tqqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[1] = x; a[3] = y; a[3] = z; a[3] = w +template psss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[0]) +template `psss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[0] = w +template psst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[1]) +template `psst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[1] = w +template pssp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[2]) +template `pssp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[2] = w +template pssq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[0], a[3]) +template `pssq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[0] = z; a[3] = w +template psts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[0]) +template `psts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[0] = w +template pstt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[1]) +template `pstt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[1] = w +template pstp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[2]) +template `pstp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[2] = w +template pstq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[1], a[3]) +template `pstq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[1] = z; a[3] = w +template psps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[0]) +template `psps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[0] = w +template pspt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[1]) +template `pspt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[1] = w +template pspp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[2]) +template `pspp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[2] = w +template pspq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[2], a[3]) +template `pspq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[2] = z; a[3] = w +template psqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[0]) +template `psqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[0] = w +template psqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[1]) +template `psqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[1] = w +template psqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[2]) +template `psqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[2] = w +template psqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[0], a[3], a[3]) +template `psqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[0] = y; a[3] = z; a[3] = w +template ptss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[0]) +template `ptss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[0] = w +template ptst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[1]) +template `ptst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[1] = w +template ptsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[2]) +template `ptsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[2] = w +template ptsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[0], a[3]) +template `ptsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[0] = z; a[3] = w +template ptts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[0]) +template `ptts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[0] = w +template pttt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[1]) +template `pttt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[1] = w +template pttp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[2]) +template `pttp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[2] = w +template pttq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[1], a[3]) +template `pttq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[1] = z; a[3] = w +template ptps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[0]) +template `ptps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[0] = w +template ptpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[1]) +template `ptpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[1] = w +template ptpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[2]) +template `ptpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[2] = w +template ptpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[2], a[3]) +template `ptpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[2] = z; a[3] = w +template ptqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[0]) +template `ptqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[0] = w +template ptqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[1]) +template `ptqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[1] = w +template ptqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[2]) +template `ptqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[2] = w +template ptqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[1], a[3], a[3]) +template `ptqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[1] = y; a[3] = z; a[3] = w +template ppss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[0]) +template `ppss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[0] = w +template ppst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[1]) +template `ppst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[1] = w +template ppsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[2]) +template `ppsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[2] = w +template ppsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[0], a[3]) +template `ppsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[0] = z; a[3] = w +template ppts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[0]) +template `ppts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[0] = w +template pptt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[1]) +template `pptt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[1] = w +template pptp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[2]) +template `pptp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[2] = w +template pptq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[1], a[3]) +template `pptq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[1] = z; a[3] = w +template ppps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[0]) +template `ppps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[0] = w +template pppt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[1]) +template `pppt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[1] = w +template pppp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[2]) +template `pppp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[2] = w +template pppq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[2], a[3]) +template `pppq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[2] = z; a[3] = w +template ppqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[0]) +template `ppqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[0] = w +template ppqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[1]) +template `ppqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[1] = w +template ppqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[2]) +template `ppqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[2] = w +template ppqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[2], a[3], a[3]) +template `ppqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[2] = y; a[3] = z; a[3] = w +template pqss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[0]) +template `pqss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[0] = w +template pqst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[1]) +template `pqst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[1] = w +template pqsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[2]) +template `pqsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[2] = w +template pqsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[0], a[3]) +template `pqsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[0] = z; a[3] = w +template pqts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[0]) +template `pqts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[0] = w +template pqtt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[1]) +template `pqtt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[1] = w +template pqtp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[2]) +template `pqtp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[2] = w +template pqtq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[1], a[3]) +template `pqtq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[1] = z; a[3] = w +template pqps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[0]) +template `pqps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[0] = w +template pqpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[1]) +template `pqpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[1] = w +template pqpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[2]) +template `pqpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[2] = w +template pqpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[2], a[3]) +template `pqpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[2] = z; a[3] = w +template pqqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[0]) +template `pqqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[0] = w +template pqqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[1]) +template `pqqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[1] = w +template pqqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[2]) +template `pqqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[2] = w +template pqqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [2], a[3], a[3], a[3]) +template `pqqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[2] = x; a[3] = y; a[3] = z; a[3] = w +template qsss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[0]) +template `qsss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[0] = w +template qsst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[1]) +template `qsst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[1] = w +template qssp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[2]) +template `qssp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[2] = w +template qssq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[0], a[3]) +template `qssq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[0] = z; a[3] = w +template qsts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[0]) +template `qsts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[0] = w +template qstt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[1]) +template `qstt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[1] = w +template qstp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[2]) +template `qstp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[2] = w +template qstq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[1], a[3]) +template `qstq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[1] = z; a[3] = w +template qsps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[0]) +template `qsps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[0] = w +template qspt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[1]) +template `qspt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[1] = w +template qspp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[2]) +template `qspp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[2] = w +template qspq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[2], a[3]) +template `qspq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[2] = z; a[3] = w +template qsqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[0]) +template `qsqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[0] = w +template qsqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[1]) +template `qsqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[1] = w +template qsqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[2]) +template `qsqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[2] = w +template qsqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[0], a[3], a[3]) +template `qsqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[0] = y; a[3] = z; a[3] = w +template qtss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[0]) +template `qtss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[0] = w +template qtst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[1]) +template `qtst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[1] = w +template qtsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[2]) +template `qtsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[2] = w +template qtsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[0], a[3]) +template `qtsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[0] = z; a[3] = w +template qtts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[0]) +template `qtts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[0] = w +template qttt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[1]) +template `qttt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[1] = w +template qttp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[2]) +template `qttp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[2] = w +template qttq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[1], a[3]) +template `qttq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[1] = z; a[3] = w +template qtps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[0]) +template `qtps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[0] = w +template qtpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[1]) +template `qtpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[1] = w +template qtpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[2]) +template `qtpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[2] = w +template qtpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[2], a[3]) +template `qtpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[2] = z; a[3] = w +template qtqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[0]) +template `qtqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[0] = w +template qtqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[1]) +template `qtqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[1] = w +template qtqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[2]) +template `qtqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[2] = w +template qtqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[1], a[3], a[3]) +template `qtqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[1] = y; a[3] = z; a[3] = w +template qpss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[0]) +template `qpss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[0] = w +template qpst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[1]) +template `qpst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[1] = w +template qpsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[2]) +template `qpsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[2] = w +template qpsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[0], a[3]) +template `qpsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[0] = z; a[3] = w +template qpts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[0]) +template `qpts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[0] = w +template qptt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[1]) +template `qptt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[1] = w +template qptp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[2]) +template `qptp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[2] = w +template qptq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[1], a[3]) +template `qptq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[1] = z; a[3] = w +template qpps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[0]) +template `qpps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[0] = w +template qppt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[1]) +template `qppt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[1] = w +template qppp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[2]) +template `qppp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[2] = w +template qppq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[2], a[3]) +template `qppq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[2] = z; a[3] = w +template qpqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[0]) +template `qpqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[0] = w +template qpqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[1]) +template `qpqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[1] = w +template qpqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[2]) +template `qpqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[2] = w +template qpqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[2], a[3], a[3]) +template `qpqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[2] = y; a[3] = z; a[3] = w +template qqss*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[0]) +template `qqss=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[0] = w +template qqst*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[1]) +template `qqst=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[1] = w +template qqsp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[2]) +template `qqsp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[2] = w +template qqsq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[0], a[3]) +template `qqsq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[0] = z; a[3] = w +template qqts*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[0]) +template `qqts=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[0] = w +template qqtt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[1]) +template `qqtt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[1] = w +template qqtp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[2]) +template `qqtp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[2] = w +template qqtq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[1], a[3]) +template `qqtq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[1] = z; a[3] = w +template qqps*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[0]) +template `qqps=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[0] = w +template qqpt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[1]) +template `qqpt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[1] = w +template qqpp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[2]) +template `qqpp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[2] = w +template qqpq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[2], a[3]) +template `qqpq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[2] = z; a[3] = w +template qqqs*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[0]) +template `qqqs=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[0] = w +template qqqt*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[1]) +template `qqqt=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[1] = w +template qqqp*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[2]) +template `qqqp=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[2] = w +template qqqq*[T](a: GVec234[T]): GVec4[T] = + gvec4(a [3], a[3], a[3], a[3]) +template `qqqq=`*[T](a: var GVec234[T], b: GVec4[T]) = + let x = b.x; let y = b.y; let z = b.z; let w = b.w + a[3] = x; a[3] = y; a[3] = z; a[3] = w diff --git a/tools/genswizzle.nim b/tools/genswizzle.nim new file mode 100644 index 0000000..11cedb4 --- /dev/null +++ b/tools/genswizzle.nim @@ -0,0 +1,44 @@ +import strformat + +var swizzles = @["xyzw", "rgba", "stpq"] + +echo "# Generated by tools/gensswizzle" + +for swizzle in swizzles[1 .. ^1]: + echo "\n# 1 x ", swizzle + for i1, s1 in swizzle: + echo &"template {s1}*[T](a: GVec234[T]): T = a[{i1}]" + echo &"func `{s1}=`*[T](a: var GVec234[T], b: T) = a[{i1}] = b" + +for swizzle in swizzles: + echo "\n# 2 x ", swizzle + for i1, s1 in swizzle: + for i2, s2 in swizzle: + echo &"template {s1}{s2}*[T](a: GVec234[T]): GVec2[T] =" + echo &" gvec2(a[{i1}], a[{i2}])" + echo &"template `{s1}{s2}=`*[T](a: var GVec234[T], b: GVec2[T]) =" + echo &" let x = b.x; let y = b.y" + echo &" a[0{i1}] = x; a[{i2}] = y" + +for swizzle in swizzles: + echo "\n# 3 x ", swizzle + for i1, s1 in swizzle: + for i2, s2 in swizzle: + for i3, s3 in swizzle: + echo &"template {s1}{s2}{s3}*[T](a: GVec234[T]): GVec3[T] =" + echo &" gvec3(a[{i1}], a[{i2}], a[{i3}])" + echo &"template `{s1}{s2}{s3}=`*[T](a: var GVec234[T], b: GVec3[T]) =" + echo &" let x = b.x; let y = b.y; let z = b.z" + echo &" a[{i1}] = x; a[{i2}] = y; a[{i3}] = z" + +for swizzle in swizzles: + echo "\n# 4 x ", swizzle + for i1, s1 in swizzle: + for i2, s2 in swizzle: + for i3, s3 in swizzle: + for i4, s4 in swizzle: + echo &"template {s1}{s2}{s3}{s4}*[T](a: GVec234[T]): GVec4[T] =" + echo &" gvec4(a [{i1}], a[{i2}], a[{i3}], a[{i4}])" + echo &"template `{s1}{s2}{s3}{s4}=`*[T](a: var GVec234[T], b: GVec4[T]) =" + echo &" let x = b.x; let y = b.y; let z = b.z; let w = b.w" + echo &" a[{i1}] = x; a[{i2}] = y; a[{i3}] = z; a[{i4}] = w"