-
-
Notifications
You must be signed in to change notification settings - Fork 150
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4023a8f
commit 4f4cea4
Showing
18 changed files
with
427 additions
and
115 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
export function abs4_f32( | ||
out: usize, | ||
a: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
const res = out; | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.abs(v128.load(a))); | ||
out += so; | ||
a += sa; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
export function addn4_f32( | ||
out: usize, | ||
a: usize, | ||
n: f32, | ||
num: usize, | ||
so: usize, | ||
sa: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
const res = out; | ||
const vn = f32x4.splat(n); | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.add(v128.load(a), vn)); | ||
out += so; | ||
a += sa; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/** | ||
* Takes three vec4 buffers, clamps `a` componentwise to `min(max(a, b), | ||
* c)` and stores results in `out`. Both AOS / SOA layouts are | ||
* supported, as long as all buffers are using the same layout. | ||
* | ||
* All strides must by multiples of 4. All pointers must be aligned to | ||
* multiples of 16. Returns `out` pointer. | ||
* | ||
* Set `sb` and `sc` to 0 for clamping all `a` vectors against same | ||
* bounds. | ||
* | ||
* @param out | ||
* @param a | ||
* @param b | ||
* @param c | ||
* @param num number of vec4 | ||
* @param so out element stride | ||
* @param sa A element stride | ||
* @param sb B element stride | ||
* @param sc C element stride | ||
*/ | ||
export function clamp4_f32( | ||
out: usize, | ||
a: usize, | ||
b: usize, | ||
c: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize, | ||
sb: usize, | ||
sc: usize | ||
): usize { | ||
const res = out; | ||
so <<= 2; | ||
sa <<= 2; | ||
sb <<= 2; | ||
sc <<= 2; | ||
for (; num-- > 0; ) { | ||
v128.store( | ||
out, | ||
f32x4.min(f32x4.max(v128.load(a), v128.load(b)), v128.load(c)) | ||
); | ||
out += so; | ||
a += sa; | ||
b += sb; | ||
c += sc; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
export function divn4_f32( | ||
out: usize, | ||
a: usize, | ||
n: f32, | ||
num: usize, | ||
so: usize, | ||
sa: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
const res = out; | ||
const vn = f32x4.splat(n); | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.div(v128.load(a), vn)); | ||
out += so; | ||
a += sa; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,25 @@ | ||
export * from "./abs"; | ||
export * from "./add"; | ||
export * from "./addn"; | ||
export * from "./clamp"; | ||
|
||
// TODO waiting for native impl | ||
// export * from "./div"; | ||
// export * from "./divn"; | ||
|
||
export * from "./dot"; | ||
export * from "./madd"; | ||
export * from "./maddn"; | ||
export * from "./max"; | ||
export * from "./min"; | ||
export * from "./mul"; | ||
export * from "./muln"; | ||
export * from "./mulv"; | ||
export * from "./sub"; | ||
export * from "./neg"; | ||
export * from "./normalize"; | ||
|
||
// TODO waiting for native impl | ||
// export * from "./sqrt"; | ||
|
||
export * from "./sub"; | ||
export * from "./subn"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
export function max4_f32( | ||
out: usize, | ||
a: usize, | ||
b: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize, | ||
sb: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
sb <<= 2; | ||
const res = out; | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.max(v128.load(a), v128.load(b))); | ||
out += so; | ||
a += sa; | ||
b += sb; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
export function min4_f32( | ||
out: usize, | ||
a: usize, | ||
b: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize, | ||
sb: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
sb <<= 2; | ||
const res = out; | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.min(v128.load(a), v128.load(b))); | ||
out += so; | ||
a += sa; | ||
b += sb; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/** | ||
* Takes three vec4 buffers, computes componentwise a * b - c and stores | ||
* results in `out`. Both AOS / SOA layouts are supported, as long as | ||
* all buffers are using the same layout. | ||
* | ||
* All strides must by multiples of 4. All pointers must be aligned to | ||
* multiples of 16. Returns `out` pointer. | ||
* | ||
* @param out | ||
* @param a | ||
* @param b | ||
* @param c | ||
* @param num number of vec4 | ||
* @param so out element stride | ||
* @param sa A element stride | ||
* @param sb B element stride | ||
* @param sc C element stride | ||
*/ | ||
export function msub4_f32( | ||
out: usize, | ||
a: usize, | ||
b: usize, | ||
c: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize, | ||
sb: usize, | ||
sc: usize | ||
): usize { | ||
const res = out; | ||
so <<= 2; | ||
sa <<= 2; | ||
sb <<= 2; | ||
sc <<= 2; | ||
for (; num-- > 0; ) { | ||
v128.store( | ||
out, | ||
f32x4.sub(f32x4.mul(v128.load(a), v128.load(b)), v128.load(c)) | ||
); | ||
out += so; | ||
a += sa; | ||
b += sb; | ||
c += sc; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
export function msubn4_f32( | ||
out: usize, | ||
a: usize, | ||
n: f32, | ||
c: usize, | ||
num: usize, | ||
so: usize, | ||
sa: usize, | ||
sc: usize | ||
): usize { | ||
const res = out; | ||
so <<= 2; | ||
sa <<= 2; | ||
sc <<= 2; | ||
const vn = f32x4.splat(n); | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.sub(f32x4.mul(v128.load(a), vn), v128.load(c))); | ||
out += so; | ||
a += sa; | ||
c += sc; | ||
} | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
export function muln4_f32( | ||
out: usize, | ||
a: usize, | ||
n: f32, | ||
num: usize, | ||
so: usize, | ||
sa: usize | ||
): usize { | ||
so <<= 2; | ||
sa <<= 2; | ||
const res = out; | ||
const vn = f32x4.splat(n); | ||
for (; num-- > 0; ) { | ||
v128.store(out, f32x4.mul(v128.load(a), vn)); | ||
out += so; | ||
a += sa; | ||
} | ||
return res; | ||
} |
Oops, something went wrong.