Skip to content

Commit 6ef769e

Browse files
committed
Fixes and optimizations arount check_point_on_triangle functions
1 parent 7893aa4 commit 6ef769e

File tree

8 files changed

+738
-129
lines changed

8 files changed

+738
-129
lines changed

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*******************************************************************************
44

55
=== 1.0.31 ===
6+
* Implementation of 3D mathematics using AVX instruction set.
67
* Fixed improper AVX-512 optimization for lanczos kernel genration function.
78
* Fixed Mid/Side transformation functions bug for 32-bit and 64-bit ARM processors.
89
* Added MacOS CI builds.

include/lsp-plug.in/dsp/common/3dmath.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -403,25 +403,29 @@ LSP_DSP_LIB_SYMBOL(float, check_triplet3d_vvn, const LSP_DSP_LIB_TYPE(vector3d_t
403403
*/
404404
LSP_DSP_LIB_SYMBOL(float, check_triplet3d_vv, const LSP_DSP_LIB_TYPE(vector3d_t) *v);
405405

406-
/** Analyze point location relative to the triangle of three points
406+
/**
407+
* Analyze point location relative to the triangle of three points.
408+
* All points should be considered being co-planar.
407409
*
408410
* @param t array of three triangle points
409411
* @param p point
410-
* @return value > 0 if point is candidate to be inside the triangle,
411-
* value < 0 if point is candidate to be outside the triangle,
412-
* value = 0 if point is on the edge of triangle
412+
* @return value > 0 if point is inside of the triangle,
413+
* value < 0 if point is outside of the triangle,
414+
* value = 0 if point is on the edge of the triangle
413415
*/
414416
LSP_DSP_LIB_SYMBOL(float, check_point3d_on_triangle_pvp, const LSP_DSP_LIB_TYPE(point3d_t) *t, const LSP_DSP_LIB_TYPE(point3d_t) *p);
415417

416-
/** Analyze point location relative to the triangle of three points
418+
/**
419+
* Analyze point location relative to the triangle of three points.
420+
* All points should be considered being co-planar.
417421
*
418422
* @param p1 triangle point 1
419423
* @param p2 triangle point 2
420424
* @param p3 triangle point 3
421425
* @param p point
422-
* @return value > 0 if point is candidate to be inside the triangle,
423-
* value < 0 if point is candidate to be outside the triangle,
424-
* value = 0 if point is on the edge of triangle
426+
* @return value > 0 if point is inside of the triangle,
427+
* value < 0 if point is outside of the triangle,
428+
* value = 0 if point is on the edge of the triangle
425429
*/
426430
LSP_DSP_LIB_SYMBOL(float, check_point3d_on_triangle_p3p, const LSP_DSP_LIB_TYPE(point3d_t) *p1, const LSP_DSP_LIB_TYPE(point3d_t) *p2, const LSP_DSP_LIB_TYPE(point3d_t) *p3, const LSP_DSP_LIB_TYPE(point3d_t) *p);
427431

include/private/dsp/arch/generic/3dmath.h

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,16 +1112,7 @@ namespace lsp
11121112
if (r[2] < 0.0f)
11131113
return r[2];
11141114

1115-
// Check 4
1116-
r[2] = r[0]*r[1]*r[2];
1117-
if (r[2] != 0.0f)
1118-
return r[2];
1119-
1120-
// Edge check: 3 scalar multiplications
1121-
r[0] = v[0].dx * v[1].dx + v[0].dy * v[1].dy + v[0].dz * v[1].dz;
1122-
r[1] = v[1].dx * v[2].dx + v[1].dy * v[2].dy + v[1].dz * v[2].dz;
1123-
r[2] = v[2].dx * v[0].dx + v[2].dy * v[0].dy + v[2].dz * v[0].dz;
1124-
1115+
// The point may be located on the edge or on the vertex
11251116
return r[0]*r[1]*r[2];
11261117
}
11271118

@@ -1172,16 +1163,7 @@ namespace lsp
11721163
if (r[2] < 0.0f)
11731164
return r[2];
11741165

1175-
// Check 4
1176-
r[2] = r[0]*r[1]*r[2];
1177-
if (r[2] != 0.0f)
1178-
return r[2];
1179-
1180-
// Edge check: 3 scalar multiplications
1181-
r[0] = v[0].dx * v[1].dx + v[0].dy * v[1].dy + v[0].dz * v[1].dz;
1182-
r[1] = v[1].dx * v[2].dx + v[1].dy * v[2].dy + v[1].dz * v[2].dz;
1183-
r[2] = v[2].dx * v[0].dx + v[2].dy * v[0].dy + v[2].dz * v[0].dz;
1184-
1166+
// The point may be located on the edge or on the vertex
11851167
return r[0]*r[1]*r[2];
11861168
}
11871169

include/private/dsp/arch/x86/avx/3dmath.h

Lines changed: 263 additions & 6 deletions
Large diffs are not rendered by default.

include/private/dsp/arch/x86/sse/3dmath.h

Lines changed: 75 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -116,34 +116,34 @@
116116

117117
/* 3x vector multiplication
118118
* Input:
119-
* x0 = vector1 [dx dy dz ? ]
120-
* x1 = vector2 [dx dy dz ? ]
121-
* x2 = vector3 [dx dy dz ? ]
119+
* x0 = vector1 [dx dy dz 0 ]
120+
* x1 = vector2 [dx dy dz 0 ]
121+
* x2 = vector3 [dx dy dz 0 ]
122122
*
123123
* Output:
124-
* x0 = vector1 * vector2 [ vz vx vy ? ]
125-
* x1 = vector2 * vector3 [ vz vx vy ? ]
126-
* x2 = vector3 * vector1 [ vz vx vy ? ]
124+
* x0 = vector1 * vector2 [ vz vx vy 0 ]
125+
* x1 = vector2 * vector3 [ vz vx vy 0 ]
126+
* x2 = vector3 * vector1 [ vz vx vy 0 ]
127127
*/
128128
#define VECTOR_MUL3(x0, x1, x2, x3, x4, x5, x6, x7) \
129-
__ASM_EMIT("movaps %" x0 ", %" x3) /* xmm3 = dx0 dy0 dz0 dw0 */ \
130-
__ASM_EMIT("movaps %" x1 ", %" x4) /* xmm4 = dx1 dy1 dz1 dw1 */ \
131-
__ASM_EMIT("movaps %" x2 ", %" x5) /* xmm5 = dx2 dy2 dz2 dw2 */ \
132-
__ASM_EMIT("shufps $0xc9, %" x3 ", %" x3) /* xmm3 = dy0 dz0 dx0 dw0 */ \
133-
__ASM_EMIT("shufps $0xc9, %" x4 ", %" x4) /* xmm4 = dy1 dz1 dx1 dw1 */ \
134-
__ASM_EMIT("shufps $0xc9, %" x5 ", %" x5) /* xmm5 = dy2 dz2 dx2 dw2 */ \
135-
__ASM_EMIT("movaps %" x0 ", %" x6) /* xmm6 = dx0 dy0 dz0 dw0 */ \
136-
__ASM_EMIT("movaps %" x3 ", %" x7) /* xmm7 = dy0 dz0 dx0 dw0 */ \
129+
__ASM_EMIT("movaps %" x0 ", %" x3) /* xmm3 = dx0 dy0 dz0 0 */ \
130+
__ASM_EMIT("movaps %" x1 ", %" x4) /* xmm4 = dx1 dy1 dz1 0 */ \
131+
__ASM_EMIT("movaps %" x2 ", %" x5) /* xmm5 = dx2 dy2 dz2 0 */ \
132+
__ASM_EMIT("shufps $0xc9, %" x3 ", %" x3) /* xmm3 = dy0 dz0 dx0 0 */ \
133+
__ASM_EMIT("shufps $0xc9, %" x4 ", %" x4) /* xmm4 = dy1 dz1 dx1 0 */ \
134+
__ASM_EMIT("shufps $0xc9, %" x5 ", %" x5) /* xmm5 = dy2 dz2 dx2 0 */ \
135+
__ASM_EMIT("movaps %" x0 ", %" x6) /* xmm6 = dx0 dy0 dz0 0 */ \
136+
__ASM_EMIT("movaps %" x3 ", %" x7) /* xmm7 = dy0 dz0 dx0 0 */ \
137137
\
138-
__ASM_EMIT("mulps %" x4 ", %" x0) /* xmm0 = dx0*dy1 dy0*dz1 dz0*dx1 dw0*dw1 */ \
139-
__ASM_EMIT("mulps %" x1 ", %" x3) /* xmm3 = dy0*dx1 dz0*dy1 dx0*dz1 dw0*dw1 */ \
140-
__ASM_EMIT("mulps %" x5 ", %" x1) /* xmm1 = dx1*dy2 dy1*dz2 dz1*dx2 dw1*dw2 */ \
141-
__ASM_EMIT("mulps %" x2 ", %" x4) /* xmm4 = dy1*dx2 dz1*dy2 dx1*dz2 dw1*dw2 */ \
142-
__ASM_EMIT("mulps %" x7 ", %" x2) /* xmm2 = dx2*dy0 dy2*dz0 dz2*dx0 dw2*dw0 */ \
143-
__ASM_EMIT("mulps %" x6 ", %" x5) /* xmm5 = dy2*dx0 dz2*dy0 dx2*dz0 dw2*dw0 */ \
144-
__ASM_EMIT("subps %" x3 ", %" x0) /* xmm0 = nz0 nx0 ny0 nw0 */ \
145-
__ASM_EMIT("subps %" x4 ", %" x1) /* xmm1 = nz1 nx1 ny1 nw1 */ \
146-
__ASM_EMIT("subps %" x5 ", %" x2) /* xmm2 = nz2 nx2 ny2 nw2 */
138+
__ASM_EMIT("mulps %" x4 ", %" x0) /* xmm0 = dx0*dy1 dy0*dz1 dz0*dx1 0 */ \
139+
__ASM_EMIT("mulps %" x1 ", %" x3) /* xmm3 = dy0*dx1 dz0*dy1 dx0*dz1 0 */ \
140+
__ASM_EMIT("mulps %" x5 ", %" x1) /* xmm1 = dx1*dy2 dy1*dz2 dz1*dx2 0 */ \
141+
__ASM_EMIT("mulps %" x2 ", %" x4) /* xmm4 = dy1*dx2 dz1*dy2 dx1*dz2 0 */ \
142+
__ASM_EMIT("mulps %" x7 ", %" x2) /* xmm2 = dx2*dy0 dy2*dz0 dz2*dx0 0 */ \
143+
__ASM_EMIT("mulps %" x6 ", %" x5) /* xmm5 = dy2*dx0 dz2*dy0 dx2*dz0 0 */ \
144+
__ASM_EMIT("subps %" x3 ", %" x0) /* xmm0 = nz0 nx0 ny0 0 */ \
145+
__ASM_EMIT("subps %" x4 ", %" x1) /* xmm1 = nz1 nx1 ny1 0 */ \
146+
__ASM_EMIT("subps %" x5 ", %" x2) /* xmm2 = nz2 nx2 ny2 0 */
147147

148148
/* 1x vector multiplication
149149
* Input:
@@ -1331,49 +1331,39 @@ namespace lsp
13311331
ARCH_X86_ASM
13321332
(
13331333
/* Load vectors */
1334-
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz pw */
1335-
__ASM_EMIT("movups 0x00(%[pv]), %[x0]") /* xmm0 = x0 y0 z0 w0 */
1336-
__ASM_EMIT("movups 0x10(%[pv]), %[x1]") /* xmm1 = x1 y1 z1 w1 */
1337-
__ASM_EMIT("movups 0x20(%[pv]), %[x2]") /* xmm2 = x2 y2 z2 w2 */
1338-
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = dx0 dy0 dz0 dw0 */
1339-
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = dx1 dy1 dz1 dw1 */
1340-
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = dx2 dy2 dz2 dw2 */
1334+
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz 1 */
1335+
__ASM_EMIT("movups 0x00(%[pv]), %[x0]") /* xmm0 = x0 y0 z0 1 */
1336+
__ASM_EMIT("movups 0x10(%[pv]), %[x1]") /* xmm1 = x1 y1 z1 1 */
1337+
__ASM_EMIT("movups 0x20(%[pv]), %[x2]") /* xmm2 = x2 y2 z2 1 */
1338+
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = v0 = dx0 dy0 dz0 0 */
1339+
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = v1 = dx1 dy1 dz1 0 */
1340+
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = v2 = dx2 dy2 dz2 0 */
13411341
/* 3x vector multiplications */
13421342
VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
13431343
/* 3x scalar multiplications */
1344+
/* xmm0 = m0 = v0 cross v1 */
1345+
/* xmm1 = m1 = v1 cross v2 */
1346+
/* xmm2 = m2 = v2 cross v0 */
13441347
SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
13451348
/* Compare with zeros */
1346-
__ASM_EMIT("xorps %[x4], %[x4]")
1347-
__ASM_EMIT("ucomiss %[x4], %[x0]")
1348-
__ASM_EMIT("jb 110f")
1349-
__ASM_EMIT("ucomiss %[x4], %[x1]")
1350-
__ASM_EMIT("jb 109f")
1351-
__ASM_EMIT("ucomiss %[x4], %[x2]")
1352-
__ASM_EMIT("jb 108f")
1353-
__ASM_EMIT("mulss %[x1], %[x0]")
1354-
__ASM_EMIT("mulss %[x2], %[x0]")
1355-
__ASM_EMIT("ucomiss %[x4], %[x0]")
1356-
__ASM_EMIT("jne 110f")
1357-
/* There is somewhere zero, need additional check */
1358-
/* Load vectors */
1359-
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz pw */
1360-
__ASM_EMIT("movups 0x00(%[pv]), %[x0]") /* xmm0 = x0 y0 z0 w0 */
1361-
__ASM_EMIT("movups 0x10(%[pv]), %[x1]") /* xmm1 = x1 y1 z1 w1 */
1362-
__ASM_EMIT("movups 0x20(%[pv]), %[x2]") /* xmm2 = x2 y2 z2 w2 */
1363-
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = dx0 dy0 dz0 dw0 */
1364-
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = dx1 dy1 dz1 dw1 */
1365-
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = dx2 dy2 dz2 dw2 */
1366-
/* Do 3x scalar multiplications */
1367-
SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
1368-
__ASM_EMIT("mulss %[x1], %[x0]")
1369-
__ASM_EMIT("mulss %[x2], %[x0]")
1370-
__ASM_EMIT("jmp 110f")
1371-
1372-
__ASM_EMIT("108:")
1373-
__ASM_EMIT("movss %[x2], %[x0]")
1349+
/* xmm0 = r0 = m0 dot m1 */
1350+
/* xmm1 = r1 = m1 dot m2 */
1351+
/* xmm2 = r2 = m2 dot m0 */
1352+
__ASM_EMIT("xorps %[x4], %[x4]") /* xmm4 = 0 */
1353+
__ASM_EMIT("ucomiss %[x4], %[x0]") /* r0 <=> 0 */
1354+
__ASM_EMIT("jb 110f") /* r0 < 0 */
1355+
__ASM_EMIT("mulss %[x1], %[x0]") /* xmm0 = r0 * r1 */
1356+
__ASM_EMIT("ucomiss %[x4], %[x1]") /* r1 <=> 0 */
1357+
__ASM_EMIT("jb 109f") /* r1 < 0 */
1358+
__ASM_EMIT("mulss %[x2], %[x0]") /* xmm0 = r0 * r1 * r2 */
1359+
__ASM_EMIT("ucomiss %[x4], %[x2]") /* r2 <=> 0 */
1360+
__ASM_EMIT("jae 110f") /* r2 >= 0 */
1361+
/* Fail cases */
1362+
__ASM_EMIT("movaps %[x2], %[x0]")
13741363
__ASM_EMIT("jmp 110f")
13751364
__ASM_EMIT("109:")
1376-
__ASM_EMIT("movss %[x1], %[x0]")
1365+
__ASM_EMIT("movaps %[x1], %[x0]")
1366+
/* End */
13771367
__ASM_EMIT("110:")
13781368
: [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
13791369
[x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)
@@ -1390,49 +1380,39 @@ namespace lsp
13901380
ARCH_X86_ASM
13911381
(
13921382
/* Load vectors */
1393-
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz pw */
1394-
__ASM_EMIT("movups (%[p1]), %[x0]") /* xmm0 = x0 y0 z0 w0 */
1395-
__ASM_EMIT("movups (%[p2]), %[x1]") /* xmm1 = x1 y1 z1 w1 */
1396-
__ASM_EMIT("movups (%[p3]), %[x2]") /* xmm2 = x2 y2 z2 w2 */
1397-
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = dx0 dy0 dz0 dw0 */
1398-
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = dx1 dy1 dz1 dw1 */
1399-
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = dx2 dy2 dz2 dw2 */
1383+
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz 1 */
1384+
__ASM_EMIT("movups (%[p1]), %[x0]") /* xmm0 = x0 y0 z0 1 */
1385+
__ASM_EMIT("movups (%[p2]), %[x1]") /* xmm1 = x1 y1 z1 1 */
1386+
__ASM_EMIT("movups (%[p3]), %[x2]") /* xmm2 = x2 y2 z2 1 */
1387+
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = v0 = dx0 dy0 dz0 0 */
1388+
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = v1 = dx1 dy1 dz1 0 */
1389+
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = v2 = dx2 dy2 dz2 0 */
14001390
/* 3x vector multiplications */
14011391
VECTOR_MUL3("[x0]", "[x1]", "[x2]", "[x3]", "[x4]", "[x5]", "[x6]", "[x7]")
14021392
/* 3x scalar multiplications */
1393+
/* xmm0 = m0 = v0 cross v1 */
1394+
/* xmm1 = m1 = v1 cross v2 */
1395+
/* xmm2 = m2 = v2 cross v0 */
14031396
SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
14041397
/* Compare with zeros */
1405-
__ASM_EMIT("xorps %[x4], %[x4]")
1406-
__ASM_EMIT("ucomiss %[x4], %[x0]")
1407-
__ASM_EMIT("jb 110f")
1408-
__ASM_EMIT("ucomiss %[x4], %[x1]")
1409-
__ASM_EMIT("jb 109f")
1410-
__ASM_EMIT("ucomiss %[x4], %[x2]")
1411-
__ASM_EMIT("jb 108f")
1412-
__ASM_EMIT("mulss %[x1], %[x0]")
1413-
__ASM_EMIT("mulss %[x2], %[x0]")
1414-
__ASM_EMIT("ucomiss %[x4], %[x0]")
1415-
__ASM_EMIT("jne 110f")
1416-
/* There is somewhere zero, need additional check */
1417-
/* Load vectors */
1418-
__ASM_EMIT("movups (%[p]), %[x3]") /* xmm3 = px py pz pw */
1419-
__ASM_EMIT("movups (%[p1]), %[x0]") /* xmm0 = x0 y0 z0 w0 */
1420-
__ASM_EMIT("movups (%[p2]), %[x1]") /* xmm1 = x1 y1 z1 w1 */
1421-
__ASM_EMIT("movups (%[p3]), %[x2]") /* xmm2 = x2 y2 z2 w2 */
1422-
__ASM_EMIT("subps %[x3], %[x0]") /* xmm0 = dx0 dy0 dz0 dw0 */
1423-
__ASM_EMIT("subps %[x3], %[x1]") /* xmm1 = dx1 dy1 dz1 dw1 */
1424-
__ASM_EMIT("subps %[x3], %[x2]") /* xmm2 = dx2 dy2 dz2 dw2 */
1425-
/* Do 3x scalar multiplications */
1426-
SCALAR_MUL3("[x0]", "[x1]", "[x2]", "[x3]")
1427-
__ASM_EMIT("mulss %[x1], %[x0]")
1428-
__ASM_EMIT("mulss %[x2], %[x0]")
1429-
__ASM_EMIT("jmp 110f")
1430-
1431-
__ASM_EMIT("108:")
1432-
__ASM_EMIT("movss %[x2], %[x0]")
1398+
/* xmm0 = r0 = m0 dot m1 */
1399+
/* xmm1 = r1 = m1 dot m2 */
1400+
/* xmm2 = r2 = m2 dot m0 */
1401+
__ASM_EMIT("xorps %[x4], %[x4]") /* xmm4 = 0 */
1402+
__ASM_EMIT("ucomiss %[x4], %[x0]") /* r0 <=> 0 */
1403+
__ASM_EMIT("jb 110f") /* r0 < 0 */
1404+
__ASM_EMIT("mulss %[x1], %[x0]") /* xmm0 = r0 * r1 */
1405+
__ASM_EMIT("ucomiss %[x4], %[x1]") /* r1 <=> 0 */
1406+
__ASM_EMIT("jb 109f") /* r1 < 0 */
1407+
__ASM_EMIT("mulss %[x2], %[x0]") /* xmm0 = r0 * r1 * r2 */
1408+
__ASM_EMIT("ucomiss %[x4], %[x2]") /* r2 <=> 0 */
1409+
__ASM_EMIT("jae 110f") /* r2 >= 0 */
1410+
/* Fail cases */
1411+
__ASM_EMIT("movaps %[x2], %[x0]")
14331412
__ASM_EMIT("jmp 110f")
14341413
__ASM_EMIT("109:")
1435-
__ASM_EMIT("movss %[x1], %[x0]")
1414+
__ASM_EMIT("movaps %[x1], %[x0]")
1415+
/* End */
14361416
__ASM_EMIT("110:")
14371417
: [x0] "=&x" (x0), [x1] "=&x" (x1), [x2] "=&x" (x2), [x3] "=&x" (x3),
14381418
[x4] "=&x" (x4), [x5] "=&x" (x5), [x6] "=&x" (x6), [x7] "=&x" (x7)

src/main/x86/avx.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,9 @@
488488
EXPORT1(check_triplet3d_vvn);
489489
EXPORT1(check_triplet3d_vv);
490490

491+
EXPORT1(check_point3d_on_triangle_p3p);
492+
EXPORT1(check_point3d_on_triangle_pvp);
493+
491494
// FMA3 support?
492495
if (f->features & CPU_OPTION_FMA3)
493496
{
@@ -609,6 +612,9 @@
609612
CEXPORT2(favx, check_triplet3d_v2n, check_triplet3d_v2n_fma3);
610613
CEXPORT2(favx, check_triplet3d_vvn, check_triplet3d_vvn_fma3);
611614
CEXPORT2(favx, check_triplet3d_vv, check_triplet3d_vv_fma3);
615+
616+
CEXPORT2(favx, check_point3d_on_triangle_p3p, check_point3d_on_triangle_p3p_fma3);
617+
CEXPORT2(favx, check_point3d_on_triangle_pvp, check_point3d_on_triangle_pvp_fma3);
612618
}
613619
}
614620

0 commit comments

Comments
 (0)