diff --git a/.github/workflows/arm64test.yml b/.github/workflows/arm64test.yml index c5f34b5..ce70b65 100644 --- a/.github/workflows/arm64test.yml +++ b/.github/workflows/arm64test.yml @@ -37,13 +37,13 @@ jobs: fail-fast: false matrix: - build_type: [arm64-Release] + build_type: [arm64-Debug, arm64-Release] steps: - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Clone test repository - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: walbourn/directxmathtest path: Tests diff --git a/Inc/DirectXMathVector.inl b/Inc/DirectXMathVector.inl index 91a1316..c88c73c 100644 --- a/Inc/DirectXMathVector.inl +++ b/Inc/DirectXMathVector.inl @@ -10834,40 +10834,40 @@ _Use_decl_annotations_ inline XMFLOAT3* XM_CALLCONV XMVector3ProjectStream(XMFLO pInputVector += sizeof(XMFLOAT3) * 4; float32x2_t r3 = vget_low_f32(Transform.r[3]); - float32x2_t r = vget_low_f32(Transform.r[0]); - XMVECTOR vResult0 = vmlaq_lane_f32(vdupq_lane_f32(r3, 0), V.val[0], r, 0); // Ax+M - XMVECTOR vResult1 = vmlaq_lane_f32(vdupq_lane_f32(r3, 1), V.val[0], r, 1); // Bx+N + float32x2_t r = vget_low_f32(Transform.r[2]); + XMVECTOR vResult0 = vmlaq_lane_f32(vdupq_lane_f32(r3, 0), V.val[2], r, 0); // Iz+M + XMVECTOR vResult1 = vmlaq_lane_f32(vdupq_lane_f32(r3, 1), V.val[2], r, 1); // Jz+N XM_PREFETCH(pInputVector); r3 = vget_high_f32(Transform.r[3]); - r = vget_high_f32(Transform.r[0]); - XMVECTOR vResult2 = vmlaq_lane_f32(vdupq_lane_f32(r3, 0), V.val[0], r, 0); // Cx+O - XMVECTOR W = vmlaq_lane_f32(vdupq_lane_f32(r3, 1), V.val[0], r, 1); // Dx+P + r = vget_high_f32(Transform.r[2]); + XMVECTOR vResult2 = vmlaq_lane_f32(vdupq_lane_f32(r3, 0), V.val[2], r, 0); // Kz+O + XMVECTOR W = vmlaq_lane_f32(vdupq_lane_f32(r3, 1), V.val[2], r, 1); // Lz+P XM_PREFETCH(pInputVector + XM_CACHE_LINE_SIZE); r = vget_low_f32(Transform.r[1]); - vResult0 = vmlaq_lane_f32(vResult0, V.val[1], r, 0); // Ax+Ey+M - vResult1 = vmlaq_lane_f32(vResult1, V.val[1], r, 1); // Bx+Fy+N + vResult0 = vmlaq_lane_f32(vResult0, V.val[1], r, 0); // Ey+Iz+M + vResult1 = vmlaq_lane_f32(vResult1, V.val[1], r, 1); // Fy+Jz+N XM_PREFETCH(pInputVector + (XM_CACHE_LINE_SIZE * 2)); r = vget_high_f32(Transform.r[1]); - vResult2 = vmlaq_lane_f32(vResult2, V.val[1], r, 0); // Cx+Gy+O - W = vmlaq_lane_f32(W, V.val[1], r, 1); // Dx+Hy+P + vResult2 = vmlaq_lane_f32(vResult2, V.val[1], r, 0); // Gy+Kz+O + W = vmlaq_lane_f32(W, V.val[1], r, 1); // Hy+Lz+P XM_PREFETCH(pInputVector + (XM_CACHE_LINE_SIZE * 3)); - r = vget_low_f32(Transform.r[2]); - vResult0 = vmlaq_lane_f32(vResult0, V.val[2], r, 0); // Ax+Ey+Iz+M - vResult1 = vmlaq_lane_f32(vResult1, V.val[2], r, 1); // Bx+Fy+Jz+N + r = vget_low_f32(Transform.r[0]); + vResult0 = vmlaq_lane_f32(vResult0, V.val[0], r, 0); // Ax+Ey+Iz+M + vResult1 = vmlaq_lane_f32(vResult1, V.val[0], r, 1); // Bx+Fy+Jz+N XM_PREFETCH(pInputVector + (XM_CACHE_LINE_SIZE * 4)); - r = vget_high_f32(Transform.r[2]); - vResult2 = vmlaq_lane_f32(vResult2, V.val[2], r, 0); // Cx+Gy+Kz+O - W = vmlaq_lane_f32(W, V.val[2], r, 1); // Dx+Hy+Lz+P + r = vget_high_f32(Transform.r[0]); + vResult2 = vmlaq_lane_f32(vResult2, V.val[0], r, 0); // Cx+Gy+Kz+O + W = vmlaq_lane_f32(W, V.val[0], r, 1); // Dx+Hy+Lz+P XM_PREFETCH(pInputVector + (XM_CACHE_LINE_SIZE * 5)); @@ -10912,9 +10912,9 @@ _Use_decl_annotations_ inline XMFLOAT3* XM_CALLCONV XMVector3ProjectStream(XMFLO float32x2_t VH = vld1_lane_f32(reinterpret_cast(pInputVector) + 2, zero, 0); pInputVector += InputStride; - XMVECTOR vResult = vmlaq_lane_f32(Transform.r[3], Transform.r[0], VL, 0); // X + XMVECTOR vResult = vmlaq_lane_f32(Transform.r[3], Transform.r[2], VH, 0); // Z vResult = vmlaq_lane_f32(vResult, Transform.r[1], VL, 1); // Y - vResult = vmlaq_lane_f32(vResult, Transform.r[2], VH, 0); // Z + vResult = vmlaq_lane_f32(vResult, Transform.r[0], VL, 0); // X VH = vget_high_f32(vResult); XMVECTOR W = vdupq_lane_f32(VH, 1);