mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
Create a dedicated area of 'struct thread' to return multiple-values in excess of the arg-passing registers. Gating feature is :TLS-BASED-MV-RETURN and not enabled by default. The limit of 64 (inclusive) values is the minimum to get most existing tests to pass unchanged. After the optimizations outlined below are done, the feature will be more compelling, and we can see about making it opt-out rather than opt-in, or making MULTIPLE-VALUES-LIMIT configurable. (I'm sure that some user will claim to need 1000 values.) The benefit will be fully realized in some subsequent changes, namely: freeing a DX alloc, unbinding a special var, and breaking up a catch block will all return from their frame without invoking RETURN-MULTIPLE. Similarly, some "simple" unwind-protect forms such as release-mutex could too- anything that does not clobber the thread-local area during a cleanup. Also this alleviates a big impediment to creating an LLVM-based backend which could explore performance differences among the call conventions offered, since micro-management of the stack becomes less critical. Co-authored with Antigravity |
||
|---|---|---|
| .. | ||
| assembly | ||
| code | ||
| cold | ||
| compiler | ||
| interpreter | ||
| pcl | ||
| runtime | ||