void QuaternionToMatrix(void *m0, const void *q0)
{
asm __volatile__("
lqc2 vf16,0x0(%1)
#-----------------------------------------------
# m0[0][3] = 0.0f;
# m0[1][3] = 0.0f;
# m0[2][3] = 0.0f;
#-----------------------------------------------
# vf17w = 0
# vf18w = 0
# vf19w = 0
vsub.w vf17,vf17,vf17
vsub.w vf18,vf18,vf18
vsub.w vf19,vf19,vf19
#-----------------------------------------------
# m0[0][0] = 1.0f - 2.0f * (y * y + z * z);
# m0[0][1] = 2.0f * (x * y - w * z);
# m0[0][2] = 2.0f * (x * z + w * y);
#-----------------------------------------------
# vf20xyz = yxx
# vf21xyz = yyz
# vf22xyz = zww
# vf23xyz = zzy
vaddy.x vf20,vf00,vf16y
vaddy.x vf21,vf00,vf16y
vaddz.x vf22,vf00,vf16z
vaddz.x vf23,vf00,vf16z
vaddx.y vf20,vf00,vf16x
vaddy.y vf21,vf00,vf16y
vaddw.y vf22,vf00,vf16w
vaddz.y vf23,vf00,vf16z
vaddx.z vf20,vf00,vf16x
vaddz.z vf21,vf00,vf16z
vaddw.z vf22,vf00,vf16w
vaddy.z vf23,vf00,vf16y
# vf17xyz = (y * y + z * z) (x * y - w * z) (x * z + w * y)
vmula.xyz ACC,vf20,vf21
vmadd.xz vf17,vf22,vf23
vmsub.y vf17,vf22,vf23
#-----------------------------------------------
# m0[1][0] = 2.0f * (x * y + w * z);
# m0[1][1] = 1.0f - 2.0f * (x * x + z * z);
# m0[1][2] = 2.0f * (y * z - w * x);
#-----------------------------------------------
# vf20xyz = yxx -> XxY
# vf21xyz = yyz -> yXz
# vf22xyz = zww -> WZw
# vf23xyz = zzy -> zzX
vaddx.x vf20,vf00,vf16x
vaddy.z vf20,vf00,vf16y
vaddx.y vf21,vf00,vf16x
vaddw.x vf22,vf00,vf16w
vaddz.y vf22,vf00,vf16z
vaddx.z vf23,vf00,vf16x
# vf18xyz = (x * y + w * z) (x * x + z * z) (y * z - w * x)
vmula.xyz ACC,vf20,vf21
vmadd.xy vf18,vf22,vf23
vmsub.z vf18,vf22,vf23
#-----------------------------------------------
# m0[2][0] = 2.0f * (x * z - w * y);
# m0[2][1] = 2.0f * (y * z + w * x);
# m0[2][2] = 1.0f - 2.0f * (x * x + y * y);
#-----------------------------------------------
# vf20xyz = xxy -> xYX
# vf21xyz = yxz -> ZZX
# vf22xyz = wzw -> wWY
# vf23xyz = zzx -> YXY
vaddy.y vf20,vf00,vf16y
vaddx.z vf20,vf00,vf16x
vaddz.x vf21,vf00,vf16z
vaddz.y vf21,vf00,vf16z
vaddx.z vf21,vf00,vf16x
vaddw.y vf22,vf00,vf16w
vaddy.z vf22,vf00,vf16y
vaddy.x vf23,vf00,vf16y
vaddx.y vf23,vf00,vf16x
vaddy.z vf23,vf00,vf16y
# vf19xyz = (x * z - w * y) (y * z + w * x) (x * x + y * y)
vmula.xyz ACC,vf20,vf21
vmadd.yz vf19,vf22,vf23
vmsub.x vf19,vf22,vf23
# vf17xyz *= 2
# vf18xyz *= 2
# vf19xyz *= 2
vadd.xyz vf17,vf17,vf17
vadd.xyz vf18,vf18,vf18
vadd.xyz vf19,vf19,vf19
# vf17x = 1.0f - vf17x
# vf18y = 1.0f - vf18y
# vf19z = 1.0f - vf19z
vsub.x vf17,vf00,vf17
vsub.y vf18,vf00,vf18
vsub.z vf19,vf00,vf19
vaddw.x vf17,vf17,vf00w
vaddw.y vf18,vf18,vf00w
vaddw.z vf19,vf19,vf00w
#---------------------------
sqc2 vf17,0x00(%0)
sqc2 vf18,0x10(%0)
sqc2 vf19,0x20(%0)
sqc2 vf00,0x30(%0)
"
: /* no output */
: "r"(m0) , "r"(q0)
: "memory"
);
}