Looking at cross - OpenGL 4 Reference Pages I believe the cross product is specified incorrectly in the last two elements in the last row:
x[1] . y[2] - y[1] . x[2]
x[2] . y[0] - y[2] . x[0]
x[0] . y[1] - y[1] . x[0] => term y[1] . x[0] is wrong!
It differs from the GLSL language spec here: https://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf
I believe the correct version is the one from language spec:
x[1] . y[2] - y[1] . x[2]
x[2] . y[0] - y[2] . x[0]
x[0] . y[1] - y[0] . x[1]
Not sure how to get that fixed