Caleb Zulawski
772bf2090e
Hide select impl in sealed trait
2021-10-22 00:10:44 -07:00
Caleb Zulawski
7c2d295a76
Hide mask impl details in sealed trait.
2021-10-22 00:10:44 -07:00
Jubilee Young
ab8eec7cba
Fixup import pathing for core
...
This changes simd_swizzle! to a decl_macro to give it a path,
so it can be imported using a path and not the crate root.
It also adds various uses that were missed and adjusts paths.
2021-10-21 18:20:06 -07:00
Caleb Zulawski
5b4282edcd
Improve docs
2021-10-11 13:18:59 -07:00
Caleb Zulawski
765bee6362
Update crates/core_simd/src/swizzle.rs
...
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-10-11 13:18:59 -07:00
Caleb Zulawski
cd7ecba19f
Remove adt_const_params feature
2021-10-11 13:18:59 -07:00
Caleb Zulawski
37797d9c0a
simd_shuffle -> simd_swizzle
2021-10-11 13:18:59 -07:00
Caleb Zulawski
98e4fcae5a
Fix macro in core
...
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-10-11 13:18:59 -07:00
Caleb Zulawski
10168fb7c4
Add new swizzle API
...
Expand swizzle API and migrate existing functions. Add rotate_left, rotate_right.
Hide implementation details
Add simd_shuffle macro
2021-10-11 13:18:59 -07:00
Jubilee
a16b481a08
Simplify language for scatter/gather
...
Co-authored-by: Caleb Zulawski <caleb.zulawski@gmail.com>
2021-10-03 14:35:07 -07:00
Jubilee Young
9be26656d2
Rewrite gather/scatter docs
...
Headings with # Safety and # Examples are more "std style".
Use terms like "enable" and "disable", rather than "mask" jargon.
2021-10-03 14:33:56 -07:00
Jubilee
01e9816ace
docs: fix typo gather -> scatter
...
Co-authored-by: Jacob Lifshay <programmerjake@gmail.com>
2021-10-03 11:04:58 -07:00
Jubilee Young
6d23662689
Add {gather,scatter}_select_unchecked
...
This unsafe variant allows the thinnest API, in case LLVM cannot
perform loop-invariant code motion on a hot loop when the safe
form is used.
An unchecked variant could be added to other forms, but doesn't
seem likely to improve anything, since it would just add heavier
codegen.
2021-10-03 11:04:58 -07:00
Jubilee
436ca7f7aa
Add lanes() and associated LANES const
2021-09-29 14:19:45 -07:00
Jubilee Young
b506e3e28e
Renovate for Edition 2021
...
In a still-future edition, `unsafe_op_in_unsafe_fn` may error.
Let's get ahead of that.
2021-09-29 14:11:40 -07:00
Magnus Ulimoen
ec05dfbbf9
Add associated LANES const
2021-09-29 17:20:07 +00:00
Magnus Ulimoen
4fbccafc66
Add lanes()
2021-09-29 16:38:03 +00:00
Jubilee Young
afd7c5a5ee
Make sure MaskElement is in bitmasks.rs
2021-09-27 15:27:34 -07:00
Jubilee Young
c2f59483f9
Feature-flag fused mul-add to block libcalls
2021-09-21 19:42:31 -07:00
Jubilee Young
6d3d07abfe
Feature-flag doc tests so they run for core
2021-09-21 17:19:35 -07:00
Jubilee Young
8342fe75f2
Cleanup more for std::simd also
2021-09-21 10:31:37 -07:00
Jubilee Young
b25ed7f86d
Restructure crate as core module
...
Aligns module with rust-lang/library/core, creating an... unusual
architecture that is easier to pull in as a module, as core itself can
have no dependencies (as we haven't built core yet).
2021-09-18 23:26:10 -07:00
Caleb Zulawski
8cf7a62e5d
Fix cargo features for nightly ( #155 )
...
* Fix cargo features for nightly
2021-09-08 17:01:16 -07:00
Caleb Zulawski
4aafd8e779
Rename element type variable
2021-08-16 16:38:30 -04:00
Caleb Zulawski
cf653c7b93
Update crates/core_simd/src/vector.rs
...
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-08-13 20:40:05 -04:00
Caleb Zulawski
00165ed5be
Remove mask aliases
2021-08-07 21:22:10 +00:00
Caleb Zulawski
40142ac034
Remove aliases
2021-08-07 21:15:24 +00:00
Caleb Zulawski
275889f7f4
Remove remaining usage of aliases
2021-08-07 21:06:40 +00:00
Caleb Zulawski
88f79d4a6f
Remove aliases from op trait impls
2021-08-07 20:20:20 +00:00
Caleb Zulawski
5ed57b4c85
Remove most usage of type aliases
2021-08-07 19:28:27 +00:00
Caleb Zulawski
e11286a362
Remove unused transmute file
2021-08-07 16:53:08 +00:00
Caleb Zulawski
e6d95e4798
Implement comparisons generically
2021-08-07 05:47:54 +00:00
Caleb Zulawski
ea0280539c
Implement select generically
2021-08-07 05:19:06 +00:00
Caleb Zulawski
de13b20b27
Convert all masks to a single type
2021-08-07 04:30:24 +00:00
Caleb Zulawski
ddc67e3bf2
Remove Mask trait
2021-08-07 01:17:27 +00:00
Caleb Zulawski
8cc38ae292
Remove Vector trait
2021-08-07 01:16:23 +00:00
Caleb Zulawski
dc4dc99649
Change to various generic impls
2021-08-06 03:45:57 +00:00
Caleb Zulawski
054f25f2b0
Convert all vectors to a single type
2021-08-06 02:31:24 +00:00
Caleb Zulawski
cca9102429
Change bitmasks to use less opaque type
2021-07-29 04:55:28 +00:00
Caleb Zulawski
34384b7a68
Add const_evaluatable_checked feature, change to_bitmask to use it, and fix existing std feature
2021-07-28 04:19:31 +00:00
Caleb Zulawski
97c25dd746
Add lane count marker type
2021-07-24 17:37:36 +00:00
Caleb Zulawski
f93bef35f3
Move vector implementation
2021-07-24 17:37:36 +00:00
Caleb Zulawski
529ffe05d6
Use new module naming
2021-07-24 17:37:36 +00:00
Caleb Zulawski
fdd7d6e252
Change as_slice to as_array
2021-07-24 17:37:36 +00:00
Caleb Zulawski
f178dda187
Add as_slice/as_mut_slice to Vector
2021-07-24 17:37:36 +00:00
Caleb Zulawski
c077bf3c07
Rename SimdArray to Vector, remove its generic parameter, and remove LanesAtMost32
2021-07-24 17:37:36 +00:00
Caleb Zulawski
732b7edfab
Add fmt and clippy to CI ( #147 )
...
* Add fmt and clippy to CI
* Add rust components
* Fix formatting
2021-07-23 17:43:53 -07:00
Caleb Zulawski
be96995d8d
Add portable_simd unstable feature gate ( #141 )
2021-07-19 16:13:24 -07:00
Caleb Zulawski
3954b27787
Add conversions between vendor intrinsics ( #144 )
...
* Add x86 vendor conversions
* Add wasm32 vendor types
* Add arm vendor types
* Add powerpc vendor types
2021-07-19 15:01:28 -07:00
Adam Greig
871d588ec4
Add 32-bit SIMD types i/u16x2 and i/u8x4. ( #145 )
...
These types are useful for the "SIMD32" instructions available on ARMv6
(except M-class), ARMv7 (M-class with DSP), and ARMv8.
2021-07-19 14:18:29 -07:00
Jubilee
b5ba19577f
Merge pull request #139 from rust-lang/feat/gather
...
Add SimdArray trait and safe gather/scatter API (rust-lang/stdsimd#139 )
This PR has four parts, without which it doesn't make a lot of sense:
- The introduction of the SimdArray trait for abstraction over vectors.
- The implementation of private vector-of-pointers types.
- Using these to allow constructing vectors with SimdArray::gather_{or, or_default, select}.
- Using these to allow writing vectors using SimdArray::scatter{,_select}.
2021-06-23 20:47:51 -07:00
Jubilee
3872723ead
Merge pull request #138 from rust-lang/feature/various-fns
...
Add various fns
- Sum/Product traits
- recip/to_degrees/to_radians/min/max/clamp/signum/copysign; rust-lang/stdsimd#14
- mul_add: rust-lang/stdsimd#14 , fixes rust-lang/stdsimd#102
2021-06-23 14:19:08 -07:00
Jubilee Young
1529ed43d8
Document and test doubled writes in scatter
2021-06-23 12:13:10 -07:00
Jubilee Young
f38659a46c
Add assoc const SimdArray::LANES
2021-06-22 15:28:15 -07:00
Jubilee Young
81ceda8c5b
Add SimdArray::scatter{,_select}
2021-06-21 18:18:50 -07:00
Jubilee Young
128b6f5e22
Add SimdArray::gather_{or,or_default,select}
2021-06-21 18:10:28 -07:00
Jubilee Young
2f99cc80d8
Add pointer vectors: SimdConstPtr, SimdMutPtr
2021-06-21 16:15:19 -07:00
Jubilee Young
16765a1021
Introduce SimdArray trait
...
This provides a general framework for describing relationships
between vector types and scalar types.
2021-06-21 16:15:15 -07:00
Caleb Zulawski
b0a9fe5d07
Extract constant from scalar to_radians as well
2021-06-21 21:11:37 +00:00
Caleb Zulawski
708ae61841
Remove scalar Sum/Product over questionable order of operations
2021-06-21 21:08:26 +00:00
Caleb Zulawski
15b4e28004
Add from_bitmask ( #136 )
...
* Add from_bitmask
* Add mips workaround
2021-06-21 14:05:43 -07:00
Caleb Zulawski
f102de7c8b
Add mul_add
2021-06-13 19:59:17 +00:00
Caleb Zulawski
74e6262ce4
Add min/max/clamp
2021-06-13 19:47:32 +00:00
Caleb Zulawski
b936f34a5c
Add various special functions (recip, signum, copysign)
2021-06-13 18:45:45 +00:00
Caleb Zulawski
96f0f5d29f
Implement Sum/Product over references
2021-06-13 18:00:47 +00:00
Caleb Zulawski
bdcccba55c
Implement Sum/Product traits
2021-06-13 17:52:44 +00:00
Miguel Raz Guzmán Macedo
57e67c905f
add doctests for shuffle ( #130 )
...
* add shuffle doctests/examples
2021-06-11 15:48:44 -07:00
Caleb Zulawski
68393aa594
Add mask width conversion ( #127 )
2021-06-11 15:48:05 -07:00
Caleb Zulawski
992621844f
Remove extended_key_value_attributes feature
2021-05-26 10:27:16 -04:00
Caleb Zulawski
20c3b8e13f
Merge pull request #120 from miguelraz/simd_fsqrt
...
add simd_fsqrt intrinsic
2021-05-24 19:07:12 -04:00
Caleb Zulawski
1c18f8fd59
Add byte conversions
2021-05-24 15:02:45 -07:00
miguel raz
d6795814d4
add simd_fsqrt intrinsic
2021-05-18 10:11:37 -05:00
Caleb Zulawski
45d7e80aa8
Clarify documentation
2021-05-08 00:13:40 +00:00
Caleb Zulawski
0bf5eb5f72
Add select for masks
2021-05-08 00:07:07 +00:00
Caleb Zulawski
563d2a2cfc
Add select function
2021-05-01 15:21:41 +00:00
Caleb Zulawski
589fce0313
Attempt to workaround MIPS bug
2021-04-30 23:22:27 -07:00
Caleb Zulawski
98dad13526
Make implementation more scalable by using a helper trait to determine bitmask size. Improve bitmask to int conversion.
2021-04-30 23:22:27 -07:00
Caleb Zulawski
eec42808aa
Update bitmask API
2021-04-28 21:56:11 +00:00
Caleb Zulawski
da42aa5403
Begin reducing mask API
2021-04-28 21:56:11 +00:00
Jubilee
5751179dc6
Merge pull request #107 from rust-lang/feat/simd-round
...
Add SIMD rounding intrinsics
2021-04-26 09:05:34 -07:00
Jubilee Young
6ea08d8d5f
Add SIMD round, trunc, fract
2021-04-25 18:31:49 -07:00
Jubilee Young
b4fda6ef06
Give rounding intrinsics their own modules
2021-04-25 18:27:03 -07:00
Jubilee Young
92d643b628
Remove Simd{U,I}128
2021-04-25 16:45:19 -07:00
Jubilee Young
f06427f4d6
Move lanes_at_most_64 to _32
2021-04-25 16:42:49 -07:00
Jubilee Young
91134e614e
Branchless abs
2021-04-25 16:42:49 -07:00
Jubilee Young
e8b6bca694
Finish fixing up abs docs
2021-04-25 16:42:49 -07:00
Caleb Zulawski
1f4e902ee7
Fix saturating math docs
2021-04-25 16:42:49 -07:00
Jubilee
24ebae870e
Merge pull request #83 from rust-lang/feature/reductions
...
Add reductions
2021-04-22 16:44:41 -07:00
Caleb Zulawski
04ee107323
Remove wrapping from sum/product fns
2021-04-22 22:41:12 +00:00
Jubilee
2fa62b91c8
Merge pull request #98 from rust-lang/feature/common-shuffles
...
Add some common shuffles
2021-04-20 23:33:01 -07:00
Caleb Zulawski
7028a58294
Attempt to clarify interleave/deinterleave
2021-04-20 01:51:06 +00:00
Caleb Zulawski
828b274ae7
Rename sum, product to horizontal_{sum,product}
2021-04-19 23:41:11 +00:00
Jubilee Young
9acc112090
Use fabs intrinsic
2021-04-19 04:49:04 +00:00
Caleb Zulawski
1999c54890
Clarify concatenation order
...
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-04-17 15:21:25 -04:00
Caleb Zulawski
977f26f692
Add some common shuffles
2021-04-17 17:00:14 +00:00
Caleb Zulawski
e73985f25d
Merge pull request #89 from rust-lang/intrinsic-neg
...
Use neg intrinsics
2021-04-16 21:35:11 -04:00
Caleb Zulawski
01d78aa21a
Update docs
2021-04-17 01:32:45 +00:00
Jubilee Young
87b7207acd
Use neg intrinsics
2021-04-16 15:02:59 -07:00
Jubilee Young
e3f0124baf
Silence warnings
2021-04-15 15:19:44 -07:00
Caleb Zulawski
e127586709
Improve function names and docs
2021-04-11 10:59:05 -04:00
Caleb Zulawski
e2fa502617
Enable i586 workaround for both f32 and f64
2021-04-09 16:31:03 -04:00
Caleb Zulawski
3fae09bd08
Revert "Revert i586 fix, fix test instead"
...
This reverts commit 1ea2f128821339d8050ca936f24b71677352437e.
2021-04-09 16:31:03 -04:00
Caleb Zulawski
b51febbd34
Revert i586 fix, fix test instead
2021-04-09 16:31:03 -04:00
Caleb Zulawski
4b8cbd5385
Fix i586 detection
2021-04-09 16:31:03 -04:00
Caleb Zulawski
64f564866b
Update documentation and fix i586 inaccuracy
2021-04-09 16:31:03 -04:00
Caleb Zulawski
02608d44f7
Fix mask ops
2021-04-09 16:31:03 -04:00
Caleb Zulawski
875b31c33f
Implement reductions
2021-04-09 16:31:03 -04:00
Caleb Zulawski
926cf3aba3
Add intrinsics
2021-04-09 16:31:03 -04:00
Caleb Zulawski
d7649f46f3
Various bug fixes
2021-04-09 16:31:03 -04:00
Caleb Zulawski
b0a005dcfb
Add floating-point classification functions
2021-04-09 16:31:03 -04:00
Caleb Zulawski
e6a530907a
Reduce maximum lanes from 64 to 32
2021-04-03 14:43:33 -04:00
Caleb Zulawski
97bbe2d86a
Fix normal and subnormal classification
2021-04-03 13:54:29 -04:00
Caleb Zulawski
07247a001f
Various bug fixes
2021-04-03 13:54:29 -04:00
Caleb Zulawski
93ce1c1a59
Add floating-point classification functions
2021-04-03 13:54:29 -04:00
Jubilee Young
331230fabf
Explain why to use saturation
2021-04-02 09:11:27 -07:00
Jubilee Young
dd1a5e41ad
Add saturating abs/neg
2021-04-02 08:55:45 -07:00
Jubilee Young
4a6b4c0a2e
Introduce saturating math
2021-03-30 17:42:05 -07:00
Caleb Zulawski
fa77b196c8
Add std cargo feature
2021-03-22 14:00:02 -07:00
Jubilee Young
a2302da5b2
Move macros.rs to first.rs
...
This awkwardly has to go first right now, and we don't want more
macros to go into this ambiguously named mod, so let's rename it
to be more literal.
2021-02-21 17:32:23 -08:00
Jubilee Young
39fb223385
Partially carve macros.rs into other files
...
The base impl_vector! in macros.rs is staying put for the moment as
it must go first before everything in order to work.
Everything else, like transmutes, specific type impls, etc. have
been moved into appropriate files elsewhere to subdivide concerns.
2021-02-21 17:32:23 -08:00
Jubilee Young
ca15e4fcd8
cat vector types by kind
...
Rearrange aliases to bottom of files
2021-02-21 17:32:15 -08:00
Jubilee Young
27f094f5ee
Nominate base files
2021-02-21 16:25:58 -08:00
Jubilee Young
1a19ad4fb0
Reorg vectors into crate::vector::*;
2021-02-21 16:25:58 -08:00
Jubilee Young
2f2a463c0d
Remove From<Scalar> for SimdTy impl
...
0. It was not being tested.
1. The possible conversions are ambiguous between splatting
and setting a single value but zero-initializing the rest.
2. Splat works fine.
2021-02-16 10:04:50 -08:00
Caleb Zulawski
2b3f4b258c
Add LanesAtMost64 bounds
2021-02-15 18:38:35 -05:00
Caleb Zulawski
976fafcf4f
Fix wasm tests
2021-02-15 18:22:56 -05:00
Caleb Zulawski
d5c227998b
Add proptest float tests
2021-02-15 18:22:24 -05:00
Caleb Zulawski
faae170f5f
Remove glob import
2021-02-13 00:52:42 -05:00
Caleb Zulawski
16904ebfc7
Add missing type bounds
2021-02-13 00:49:51 -05:00
Caleb Zulawski
6362540f11
Limit all types to 64 lanes
2021-02-09 22:13:27 -05:00
Caleb Zulawski
9e96c8a2a8
Add missing From implementation, add simple mask API tests
2021-02-09 19:14:46 -05:00
Caleb Zulawski
92293aff9d
Add bitmask that supports up to 64 lanes. Simplify mask op API.
2021-02-09 19:14:46 -05:00
Ashley Mannix
1b0c231948
Merge pull request #62 from rust-lang/feature/shuffle-self
...
Add SIMD shuffles for SimdType{2,4,8,16,32,64}
2021-02-09 13:16:17 +10:00
Jubilee Young
5424140b66
Add SIMD shuffles for SimdType{2,4,8,16,32,64}
...
This const generic implementation for certain lane sizes represents
a more limited interface than what LLVM's shufflevector instruction
can handle, as normally the length of U can be different from the
length of T, but offers an interface that it is expected to be able
to expand the capabilities of in the future.
2021-02-05 23:28:12 -08:00
miguel raz
8bea63425e
AsRef -> as_slices()
2021-02-03 17:46:08 -06:00
Jubilee
98015403c5
Merge pull request #55 from miguelraz/min-panics
...
implement guards in rem and div unsound cases
2021-02-02 17:21:09 -08:00
miguel raz
c67fc2e4c5
Add guards/tests for div,rem overflow cases
2021-02-02 18:59:22 -06:00
Jubilee Young
cb036b534d
min_const_generics ride the train to stable
2021-01-26 21:46:10 -08:00
Caleb Zulawski
59947717c5
Add workaround for rust-lang/rust#80108
2020-12-17 01:19:39 -05:00
Caleb Zulawski
9b8cb18c9f
Remove obsolete files
2020-12-14 00:40:59 -05:00
Caleb Zulawski
62d98e3a11
Remove obsolete macros
2020-12-14 00:34:32 -05:00
Caleb Zulawski
2720ccc5a7
Fix masks
2020-12-14 00:27:20 -05:00
Caleb Zulawski
0ddf7acc89
Reenable rounding ops
2020-12-14 00:07:36 -05:00
Caleb Zulawski
9cc3deaa92
Finish refactoring vector types
2020-12-14 00:00:02 -05:00
Caleb Zulawski
25c7640fb3
Reenable ops and fix tests
2020-12-14 00:00:02 -05:00
Caleb Zulawski
22576bb6e0
Implement additional functions
2020-12-14 00:00:02 -05:00
Caleb Zulawski
27e944231c
Begin changing vectors to const generics
2020-12-14 00:00:02 -05:00
Caleb Zulawski
35b9ab9f5c
Simplify some formatting
2020-12-14 00:00:02 -05:00
Caleb Zulawski
78a8d615b5
Implement missing traits on opaque masks, fix tests
2020-12-14 00:00:02 -05:00
Caleb Zulawski
5bc5d7f0d1
Add comparison ops
2020-12-14 00:00:02 -05:00
Caleb Zulawski
cebc2ca707
Add opaque masks
2020-12-13 23:59:07 -05:00
Jubilee Young
3d9bbf9b86
Use simd_{floor,ceil} intrinsics for round.rs
2020-11-30 19:31:08 -08:00
Caleb Zulawski
5805c7a051
Fix comment
2020-10-11 14:34:57 -04:00
Caleb Zulawski
3d8721b053
Fix casts, add tests
2020-10-11 14:32:46 -04:00
Caleb Zulawski
75fdacde1c
Add rounding to integers
2020-10-11 13:22:26 -04:00
Caleb Zulawski
ffedbe5b15
Add rounding functions
2020-10-10 00:22:36 -04:00
Thom Chiovoloni
ffd562f218
Add comment about fneg to the bitxor in float neg
2020-10-07 13:24:21 -07:00
Thom Chiovoloni
873639d6fd
Use bitxor to implement Neg for floats
2020-10-07 11:51:54 -07:00
Thom Chiovoloni
8d3d616b13
Apply review feedback
2020-10-06 13:40:39 -07:00
Thom Chiovoloni
866971adf5
Implement abs, to_bits, and from_bits for float vectors
2020-10-06 11:33:29 -07:00
Caleb Zulawski
43dabd1aea
Implement core::ops
( #10 )
...
* Add vector-vector arithmetic ops
* Add operators and integer conversions for masks
* Add unary traits
* Implement Index and IndexMut
* Implement by-ref ops for masks
* Document intrinsics
* Implement format traits for masks
* Add floating point ops tests
* Add integer tests
* Add mask tests
2020-10-01 19:50:15 -07:00
Caleb Zulawski
cfda50a82a
Remove vectors under 64-bit width
2020-09-26 19:31:14 -04:00
Caleb Zulawski
88bfbb001e
Mark trait methods inline
2020-09-26 14:41:01 -04:00
Caleb Zulawski
b9bf9ef3c2
Remove remaining derived traits
2020-09-26 14:30:00 -04:00
Caleb Zulawski
d817b56f1d
Manually implement some traits, instead of derive
2020-09-26 14:12:30 -04:00
Caleb Zulawski
167c3c8100
Change doc attributes to comments
2020-09-25 23:23:02 -04:00
Caleb Zulawski
992768709f
Remove pointer vectors
2020-09-25 21:45:09 -04:00
Caleb Zulawski
2178409df5
Remove some obsolete macros
2020-09-25 00:52:32 -04:00
Caleb Zulawski
b7d1f3e797
Improve Debug implementation, add additional formatting traits
2020-09-25 00:44:48 -04:00
Caleb Zulawski
613f242088
Add pointer vectors and implement a few more traits
2020-09-24 21:15:31 -04:00
Caleb Zulawski
3df72fddc2
Add masks
2020-09-24 19:48:18 -04:00
Caleb Zulawski
872e8f62d6
Simplify transmutes
2020-09-23 10:42:12 -04:00
Caleb Zulawski
543bcd37e9
Combine vector definition modules by scalar type
2020-09-23 10:21:19 -04:00
Caleb Zulawski
c74eec7e25
Apply suggestions from code review
...
Co-authored-by: Lokathor <zefria@gmail.com>
2020-09-23 08:11:43 -04:00
Caleb Zulawski
0f837a9147
Add docs
2020-09-22 20:26:25 -04:00
Caleb Zulawski
011aafea16
Add initial type implementations
2020-09-22 19:41:42 -04:00