#include #include #include double min(double, double); double dotvec2_sse(Point2, Point2); double dotvec2_sse4(Point2, Point2); double dotvec2_avx(Point2, Point2); double dotvec2_sse_a(Point2*, Point2*); double dotvec2_sse4_a(Point2*, Point2*); double dotvec2_avx_a(Point2*, Point2*); double dotvec3_sse4(Point3, Point3); double dotvec3_avx(Point3, Point3); double dotvec3_sse4_a(Point3*, Point3*); Point2 Pt2b(double, double, double); Point3 crossvec3_sse(Point3, Point3); double hsubpd(double, double); double fma(double, double, double); Point2 addpt2_sse(Point2, Point2); Point2 addpt2_avx(Point2, Point2); Point3 addpt3_avx(Point3, Point3); void addsub_sse(double*,double*); double round(double); void * amalloc(ulong n, ulong a) { void *p; assert(a > 1 && (a&1) == 0); a--; p = malloc(n+a); if(p == nil) sysfatal("malloc: %r"); p = (void*)(((uintptr)p + a)&~a); return p; } void addsub(double *a, double *b) { b[0] = b[0]-a[0]; b[1] = b[1]+a[1]; } double fmin(double a, double b) { return a