public static fp3 mul(fp3 a, fp3x3 b) { return(fp3( a.x * b.c0.x + a.y * b.c0.y + a.z * b.c0.z, a.x * b.c1.x + a.y * b.c1.y + a.z * b.c1.z, a.x * b.c2.x + a.y * b.c2.y + a.z * b.c2.z)); }
public static fp3x3 transpose(fp3x3 v) { return(fp3x3( v.c0.x, v.c0.y, v.c0.z, v.c1.x, v.c1.y, v.c1.z, v.c2.x, v.c2.y, v.c2.z)); }
public static fp4x3 mul(fp4x3 a, fp3x3 b) { return(fp4x3( a.c0 * b.c0.x + a.c1 * b.c0.y + a.c2 * b.c0.z, a.c0 * b.c1.x + a.c1 * b.c1.y + a.c2 * b.c1.z, a.c0 * b.c2.x + a.c1 * b.c2.y + a.c2 * b.c2.z)); }
public static fp3x4 mul(fp3x3 a, fp3x4 b) { return(fp3x4( a.c0 * b.c0.x + a.c1 * b.c0.y + a.c2 * b.c0.z, a.c0 * b.c1.x + a.c1 * b.c1.y + a.c2 * b.c1.z, a.c0 * b.c2.x + a.c1 * b.c2.y + a.c2 * b.c2.z, a.c0 * b.c3.x + a.c1 * b.c3.y + a.c2 * b.c3.z)); }
public static fp3x2 mul(fp3x3 a, fp3x2 b) { return(fp3x2( a.c0 * b.c0.x + a.c1 * b.c0.y + a.c2 * b.c0.z, a.c0 * b.c1.x + a.c1 * b.c1.y + a.c2 * b.c1.z)); }
public static fp3 mul(fp3x3 a, fp3 b) { return(a.c0 * b.x + a.c1 * b.y + a.c2 * b.z); }
public static uint3 hashwide(fp3x3 v) { return((fpmath.asuint(v.c0) * uint3(0xEADF0775u, 0x747A9D7Bu, 0x4111F799u) + fpmath.asuint(v.c1) * uint3(0xB5F05AF1u, 0xFD80290Bu, 0x8B65ADB7u) + fpmath.asuint(v.c2) * uint3(0xDFF4F563u, 0x7069770Du, 0xD1224537u)) + 0xE99ED6F3u); }
public static uint hash(fp3x3 v) { return(math.csum(fpmath.asuint(v.c0) * uint3(0xD42EAFA3u, 0xD9AFD06Du, 0x97A65421u) + fpmath.asuint(v.c1) * uint3(0x7809205Fu, 0x9C9F0823u, 0x5A9CA13Bu) + fpmath.asuint(v.c2) * uint3(0xAFCDD5EFu, 0xA88D187Du, 0xCF6EBA1Du)) + 0x9D88E5A1u); }