Skip to content

Commit

Permalink
feat(vectors): add strided versions of various ops
Browse files Browse the repository at this point in the history
- add/update codegen for strided vector ops:
  - add assembleS(), compileS()
  - update defOpS() / defHopOpS()
- add new supporting fn types for strided ops
- add magS()
- add normalizeS()
- add randomS(), randNormS(), randMinMaxS()
- add arbitrary size impls to various other strided vector ops
  • Loading branch information
postspectacular committed Aug 30, 2021
1 parent 92e7f73 commit cbd9576
Show file tree
Hide file tree
Showing 25 changed files with 363 additions and 121 deletions.
10 changes: 5 additions & 5 deletions packages/vectors/src/addmns.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { VecOpSVNV } from "./api";
import type { VecOpSGVNV, VecOpSVNV } from "./api";
import { ARGS_VVN, defOpS, SARGS_VV } from "./internal/codegen";
import { MATH2_N } from "./internal/templates";

export const [addmNS2, addmNS3, addmNS4] = defOpS<VecOpSVNV>(
MATH2_N("+", "*"),
`${ARGS_VVN},${SARGS_VV}`
);
export const [addmNS, addmNS2, addmNS3, addmNS4] = defOpS<
VecOpSGVNV,
VecOpSVNV
>(MATH2_N("+", "*"), ARGS_VVN, SARGS_VV);
7 changes: 4 additions & 3 deletions packages/vectors/src/addms.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { VecOpSVVV } from "./api";
import type { VecOpSGVVV, VecOpSVVV } from "./api";
import { ARGS_VVV, defOpS, SARGS_VVV } from "./internal/codegen";
import { MATH2 } from "./internal/templates";

export const [addmS2, addmS3, addmS4] = defOpS<VecOpSVVV>(
export const [addmS, addmS2, addmS3, addmS4] = defOpS<VecOpSGVVV, VecOpSVVV>(
MATH2("+", "*"),
`${ARGS_VVV},${SARGS_VVV}`,
ARGS_VVV,
SARGS_VVV,
ARGS_VVV
);
7 changes: 4 additions & 3 deletions packages/vectors/src/addns.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { VecOpSVN } from "./api";
import type { VecOpSGVN, VecOpSVN } from "./api";
import { ARGS_V, ARGS_VN, defOpS, SARGS_V } from "./internal/codegen";
import { MATH_N } from "./internal/templates";

export const [addNS2, addNS3, addNS4] = defOpS<VecOpSVN>(
export const [addNS, addNS2, addNS3, addNS4] = defOpS<VecOpSGVN, VecOpSVN>(
MATH_N("+"),
`${ARGS_VN},${SARGS_V}`,
ARGS_VN,
SARGS_V,
ARGS_V
);
6 changes: 4 additions & 2 deletions packages/vectors/src/adds.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type { VecOpSVV } from "./api";
import type { VecOpSGVV, VecOpSVV } from "./api";
import { defOpS } from "./internal/codegen";
import { MATH } from "./internal/templates";

export const [addS2, addS3, addS4] = defOpS<VecOpSVV>(MATH("+"));
export const [addS, addS2, addS3, addS4] = defOpS<VecOpSGVV, VecOpSVV>(
MATH("+")
);
131 changes: 131 additions & 0 deletions packages/vectors/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,15 @@ export type VecOpSV = (
so?: number,
sa?: number
) => Vec;
export type VecOpSGV = (
out: Vec | null,
a: ReadonlyVec,
num: number,
io?: number,
ia?: number,
so?: number,
sa?: number
) => Vec;

export type VecOpSVN = (
out: Vec | null,
Expand All @@ -143,6 +152,16 @@ export type VecOpSVN = (
so?: number,
sa?: number
) => Vec;
export type VecOpSGVN = (
out: Vec | null,
a: ReadonlyVec,
n: number,
num: number,
io?: number,
ia?: number,
so?: number,
sa?: number
) => Vec;

export type VecOpSVV = (
out: Vec | null,
Expand All @@ -155,6 +174,18 @@ export type VecOpSVV = (
sa?: number,
sb?: number
) => Vec;
export type VecOpSGVV = (
out: Vec | null,
a: ReadonlyVec,
b: ReadonlyVec,
num: number,
io?: number,
ia?: number,
ib?: number,
so?: number,
sa?: number,
sb?: number
) => Vec;

export type VecOpSVNV = (
out: Vec | null,
Expand All @@ -168,6 +199,19 @@ export type VecOpSVNV = (
sa?: number,
sb?: number
) => Vec;
export type VecOpSGVNV = (
out: Vec | null,
a: ReadonlyVec,
n: number,
b: ReadonlyVec,
num: number,
io?: number,
ia?: number,
ib?: number,
so?: number,
sa?: number,
sb?: number
) => Vec;

export type VecOpSVVN = (
out: Vec | null,
Expand All @@ -181,6 +225,19 @@ export type VecOpSVVN = (
sa?: number,
sb?: number
) => Vec;
export type VecOpSGVVN = (
out: Vec | null,
a: ReadonlyVec,
b: ReadonlyVec,
n: number,
num: number,
io?: number,
ia?: number,
ib?: number,
so?: number,
sa?: number,
sb?: number
) => Vec;

export type VecOpSVVV = (
out: Vec | null,
Expand All @@ -196,8 +253,29 @@ export type VecOpSVVV = (
sb?: number,
sc?: number
) => Vec;
export type VecOpSGVVV = (
out: Vec | null,
a: ReadonlyVec,
b: ReadonlyVec,
c: ReadonlyVec,
num: number,
io?: number,
ia?: number,
ib?: number,
ic?: number,
so?: number,
sa?: number,
sb?: number,
sc?: number
) => Vec;

export type VecOpSRoV<T> = (a: ReadonlyVec, ia?: number, sa?: number) => T;
export type VecOpSGRoV<T> = (
a: ReadonlyVec,
num: number,
ia?: number,
sa?: number
) => T;

export type VecOpSRoVV<T> = (
a: ReadonlyVec,
Expand All @@ -217,6 +295,16 @@ export type VecOpSVO<T> = (
so?: number,
sa?: number
) => Vec;
export type VecOpSGVO<T> = (
out: Vec | null,
a: ReadonlyVec,
num: number,
b?: T,
io?: number,
ia?: number,
so?: number,
sa?: number
) => Vec;

export type VecOpSOO<A, B> = (
a: Vec | null,
Expand All @@ -225,6 +313,14 @@ export type VecOpSOO<A, B> = (
ia?: number,
sa?: number
) => Vec;
export type VecOpSGOO<A, B> = (
a: Vec | null,
num: number,
opt1?: A,
opt2?: B,
ia?: number,
sa?: number
) => Vec;

export type VecOpSOOO<A, B, C> = (
a: Vec | null,
Expand All @@ -234,6 +330,41 @@ export type VecOpSOOO<A, B, C> = (
ia?: number,
sa?: number
) => Vec;
export type VecOpSGOOO<A, B, C> = (
a: Vec | null,
num: number,
opt1?: A,
opt2?: B,
opt3?: C,
ia?: number,
sa?: number
) => Vec;

export type VecOpSVVO<O> = (
out: Vec | null,
a: ReadonlyVec,
b: ReadonlyVec,
opt?: O,
io?: number,
ia?: number,
ib?: number,
so?: number,
sa?: number,
sb?: number
) => Vec;
export type VecOpSGVVO<O> = (
out: Vec | null,
a: ReadonlyVec,
b: ReadonlyVec,
num: number,
opt?: O,
io?: number,
ia?: number,
ib?: number,
so?: number,
sa?: number,
sb?: number
) => Vec;

export type MultiVecOpImpl<T> = T & MultiVecOp<T>;

Expand Down
7 changes: 4 additions & 3 deletions packages/vectors/src/divns.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import type { VecOpSVN } from "./api";
import type { VecOpSGVN, VecOpSVN } from "./api";
import { ARGS_V, ARGS_VN, defOpS, SARGS_V } from "./internal/codegen";
import { MATH_N } from "./internal/templates";

export const [divNS2, divNS3, divNS4] = defOpS<VecOpSVN>(
export const [divNS, divNS2, divNS3, divNS4] = defOpS<VecOpSGVN, VecOpSVN>(
MATH_N("/"),
`${ARGS_VN},${SARGS_V}`,
ARGS_VN,
SARGS_V,
ARGS_V
);
6 changes: 4 additions & 2 deletions packages/vectors/src/divs.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type { VecOpSVV } from "./api";
import type { VecOpSGVV, VecOpSVV } from "./api";
import { defOpS } from "./internal/codegen";
import { MATH } from "./internal/templates";

export const [divS2, divS3, divS4] = defOpS<VecOpSVV>(MATH("/"));
export const [divS, divS2, divS3, divS4] = defOpS<VecOpSGVV, VecOpSVV>(
MATH("/")
);
Loading

0 comments on commit cbd9576

Please sign in to comment.