Robert O'Callahan
745222fa3b
Make SigSpec::unpack() non-const
2025-11-07 15:54:56 +00:00
Robert O'Callahan
870ae18a2d
Switch the SigSpec packed representation to allow just a single chunk that's inline in the SigSpec.
...
Single-chunk SigSpecs are very common and this avoids a heap allocation. It also simplifies
some algorithms.
2025-11-07 15:54:56 +00:00
Robert O'Callahan
e1169d03fe
Use chunks iterator for SigSpec::extract()
2025-11-07 15:54:56 +00:00
Robert O'Callahan
4939484840
Don't reset the hash when unpacking, instead clear the hash whenever bits are modified
2025-11-07 15:54:56 +00:00
Robert O'Callahan
aa4a0fe815
Use size() instead of direct access to width_ in many places
2025-11-07 15:54:56 +00:00
Robert O'Callahan
619f49eabe
Remove unnecessary pack() from SigSpec::extend_u0()
2025-11-07 15:54:55 +00:00
Robert O'Callahan
b612c1bb39
Simplify SigSpec::as_bit()
2025-11-07 15:54:55 +00:00
Robert O'Callahan
a69d48dd19
Instead of using packing and hashing to compute SigSpec ordering and equality, just use the width and chunkwise comparisons
...
This avoids having to pack and compute hashes, and generally results in a
simpler ordering.
2025-11-07 15:54:55 +00:00
Robert O'Callahan
92ea557979
Build a temporary SigChunk list in the iterator in the cases where that's needed
2025-11-07 15:54:55 +00:00
Robert O'Callahan
7394a2c597
Make SigSpec conversion to vector of SigChunk use chunks iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
974b4dbe25
Make SigSpec::parse_rhs use is_chunk to avoid direct access to chunks_
2025-11-07 15:54:55 +00:00
Robert O'Callahan
62cd3ddfb8
Make SigSpec::to_sigbit_pool use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
4ed25c0538
Make SigSpec::to_sigbit_set use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
39b89aae88
Use SigSpec::try_as_const in some places
2025-11-07 15:54:55 +00:00
Robert O'Callahan
dd3940c8bb
Make SigSpec::is_one_hot use try_as_const
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ce597dc38c
Fix try_as_const/as_wire/as_chunk
2025-11-07 15:54:55 +00:00
Robert O'Callahan
0281ed1458
Add try_as_const and use the const iterator a bit more
2025-11-07 15:54:55 +00:00
Robert O'Callahan
0091d14e6d
Make SigSpec::has_marked_bits use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
80b3efb3da
Make SigSpec::has_const(State) use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ed8022f53f
Make SigSpec::has_const use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
1893c61fe2
Make SigSpec::is_fully_undef use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
e2defe7898
Make SigSpec::is_fully_def use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
152a487cc8
Make SigSpec::is_fully_ones use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
ddd04e13e0
Make SigSpec::is_fully_zero use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
a7ac396fd9
Make is_fully_const use chunk iterator
2025-11-07 15:54:55 +00:00
Robert O'Callahan
b0ee67a355
Make SigSpec::is_wire/is_chunk/is_fully_const use chunk iterator
2025-11-07 15:54:54 +00:00
Robert O'Callahan
fc7d61132d
Make SigSpec::updhash() use chunk iterator
2025-11-07 15:54:54 +00:00
Robert O'Callahan
3f7af10eda
Make SigSpec::chunks() return an object that can be iterated over without packing the SigSpec
2025-11-07 15:54:54 +00:00
Robert O'Callahan
8d4f790951
Make Module stop accessing internals of SigSpec
2025-11-07 13:25:38 +00:00
KrystalDelusion
52c108cd6a
Merge pull request #4596 from YosysHQ/emil/path-sep-refactor
...
Refactor getting dirs and filenames from paths to files
2025-11-05 09:12:54 +13:00
Miodrag Milanović
0751b74e7a
Merge pull request #5441 from donn/pyosys_bugfixes
...
pyosys: fix a number of regressions from 0.58
2025-11-04 07:36:25 +01:00
Krystine Sherwin
336877a353
io.cc: Drop unused variable
2025-11-04 12:27:31 +13:00
Vaibhav Singh
88d101b462
kernel: Fix define ID issue, needs undef first
2025-10-31 14:06:00 +05:30
Robert O'Callahan
a27b1a83ae
Don't recompute hash using moved-out-of value
2025-10-28 07:41:10 +00:00
Mohamed Gaber
d6b9158fa3
pyosys: fix regressions from 0.58
...
- consistently use value semantics for objects passed along FFI boundary
(not ideal but matches previous behavior)
- add new overload of RTLIL::Module: addMemory that does not require a "donor" object
- the idea is `Module`, `Memory`, `Wire`, `Cell` and `Process` cannot be directly constructed in Python and can only be added to the existing memory hierarchy in `Design` using the `add` methods - `Memory` requiring a donor object was the odd one out here
- fix superclass member wrapping only looking at direct superclass for inheritance instead of recursively checking superclasses
- fix superclass member wrapping not using superclass's denylists
- fix Design's `__str__` function not returning a string
- fix the generator crashing if there's any `std::function` in a header
- misc: add a crude `__repr__` based on `__str__`
2025-10-26 02:21:40 +03:00
Emil Jiří Tywoniak
79cd4e08c4
io: use std::filesystem
2025-10-14 15:47:07 +02:00
Emil J. Tywoniak
5cfe6a9c1e
reduce OS ifdefs, refactor getting dirs and filenames from paths to files
2025-10-14 15:46:17 +02:00
Emil J
9a12d92551
Merge pull request #5386 from YosysHQ/emil/liberty-glob-all
...
Expand wildcards in Liberty file consumers
2025-10-09 20:21:48 +02:00
Emil J
a80462f27f
Merge pull request #5339 from rocallahan/fast-rtlil-parser
...
Rewrite the RTLIL parser for efficiency
2025-10-08 14:52:37 +02:00
Miodrag Milanović
b7a72811cc
Merge pull request #5408 from rocallahan/atomic-mfp
...
Make `mfp` const methods thread-safe.
2025-10-08 13:08:16 +02:00
Robert O'Callahan
2f81c55389
Make mfp const methods thread-safe.
...
In particular, we make the parent links relaxed atomics so concurrent
`ifind()` calls are safe.
This may appear to cause a tiny performance regression but as discussed
in https://yosyshq.discourse.group/t/parallel-optmergepass-implementation/87/16
this is probably just noise.
2025-10-06 22:44:01 +00:00
Mohamed Gaber
80fcce64da
pyosys: fix ref-only classes, implicit conversions
...
+ cleanup
2025-10-03 11:54:44 +03:00
Mohamed Gaber
447a6cb3f0
misc: WITH_PYTHON -> YOSYS_ENABLE_PYTHON
...
For consistency.
Also trying a new thing: only rebuilding objects that use the pybind11 library. The idea is these are the only objects that include the Python/pybind headers and thus the only ones that depend on the Python ABI in any capacity, so other objects can be reused across wheel builds. This has the potential to cut down build times.
2025-10-03 11:54:44 +03:00
Mohamed Gaber
54799bb8be
pyosys: globals, set operators for opaque types
...
There is so much templating going on that compiling wrappers.cc now takes 1m1.668s on an Apple M4…
2025-10-03 11:54:44 +03:00
Mohamed Gaber
88be728353
pyosys: rewrite using pybind11
...
- Rewrite all Python features to use the pybind11 library instead of boost::python.
Unlike boost::python, pybind11 is a header-only library that is just included by Pyosys code, saving a lot of compile time on wheels.
- Factor out as much "translation" code from the generator into proper C++ files
- Fix running the embedded interpreter not supporting "from pyosys import libyosys as ys" like wheels
- Move Python-related elements to `pyosys` directory at the root of the repo
- Slight shift in bridging semantics:
- Containers are declared as "opaque types" and are passed by reference to Python - many methods have been implemented to make them feel right at home without the overhead/ambiguity of copying to Python and then copying back after mutation
- Monitor/Pass use "trampoline" pattern to support virual methods overridable in Python: virtual methods no longer require `py_` prefix
- Create really short test set for pyosys that just exercises basic functionality
2025-10-03 11:54:44 +03:00
Robert O'Callahan
d45223976a
Optimize IdString::empty()
...
I actually saw this take 0.6% of the time in an `opt_clean` pass (under Module::check()).
Trivial issue, but the fix is also trivial and simple.
2025-10-01 02:49:03 +00:00
Robert O'Callahan
db3d9a1baf
When adding named elements to an RTLIL::Module, std::move the name to avoid refcount churn
2025-09-30 21:39:18 +00:00
Robert O'Callahan
86d8dd6224
Add a moving assignment operator for IdString to avoid refcount churn
2025-09-30 21:39:18 +00:00
Robert O'Callahan
39c6e06e3d
Add an IdString(std::string_view) constructor for efficiency when we already know the string length
2025-09-30 21:39:18 +00:00
Robert O'Callahan
6b43fca8df
Make the Const string constructor take the string by value and move it into the const
2025-09-30 21:39:18 +00:00