…le LFNs, making CreateFileW an ordinary alien routine once again.
lp#807475 Going in despite the freeze since this is a regression that can semi-randomly break correct code. *ouch* Thanks to Bart Bortta and #sbcl for the analysis. Problem 1: T1 holds L1 T2 is waiting for L1 T2 is interrupted, interrupt handler grabs L2 T1 starts waiting on L2 Prior to this patch, when GET-MUTEX in T2's interrupt handler grabbed L2 is marked T2 as still waiting for L1 -- which is not true until the interrupt handler returns. Problem 2: T1 holds L1 T2 is waiting for L1 GC is triggered in T2 inside GET-MUTEX T2 grabs *ALREADY-IN-GC* lock GC is triggered in T1, T1 tries to get *ALREADY-IN-GC* lock. Prior to this patch, when T1 detects a bogus deadlock as T2 has been marked as waiting for L1 -- which is not true until the GC is finished and normal execution resumes. Problem 3: T1 holds L1 T2 is waiting for L1 GC is triggered in T2 inside GET-MUTEX T2 grabs lock L2 due to a finalizer or an after-gc-hook GC is triggered in T1 T1 tries to grab L2 due to a finalizer, etc. Same as problem 2, but with a user-lock and POST-GC instead of *ALREADY-IN-GC* and SUB-GC. This patch fixes the issue by saving, clearing, and restoring the waiting-for mark in 1) interrupt handlers 2) SUB-GC 3) POST-GC
Applying &rest lists to known/typed functions can lead to a :fixed values call to %more-arg-values. In that case, unroll it into several %more-arg of constant indices. Reported, with test case, by Lutz Euler (lp#826459).
* Does the same thing as only returning the first value of %MULTIPLY, only better on some platforms. * Implemented vas VOPs on x86, x86-64 and PPC. The PPC code sequence is fully untested, and merely looks correct. * VOPs for fixnum first argument are included, but will only be used when the result is forcibly marked as fixnum, e.g., with TRULY-THE. Questionnable, but I'd rather err on the side of straightforwardness rather than put even more pressure on representation selection. * Use it in the division-by-multiplication transform for unsigned TRUNCATE by constant.
* Exploit restricted range for inputs (e.g. fixnums). * When the divisor is even, simplify with a mask instead of a shift. * Clean up the code a bit: we don't want modular arithmetic, it's actually all guaranteed not to wrap around. * Change the test so that larger divisors are a bit more likely to get tested too. * Lots more things can be done, including generalizing the transform to pretty much arbitrary rational divisor, or avoiding the costly general code sequence in nearly all cases. Unfortunately, it's a lot of (somewhat original, at that) code, and can be fairly slow; if it matters to someone, I can try and find a compromise (contrib?).
* Fix typos in mnemonics and non-temporal store definitions; * Add some instructions; * CLFLUSH was totally broken. Taken from Alexander Gavrilov's SSE intrinsics branch.
base-string conversion -- sb-kernel:extended-char-p seems to be broken (everywhere); now using base-char-p instead.
'base-stringification': avoid consing a temporal non-base string.
cold" to use coerce in intern.
symbols anyway, let's save some storage by using base strings for new symbols when possible.
...and MAP, MERGE, COERCE and CONCATENATE too. This also meant working a bit on TYPEXPAND, to make (STRING <N>) be unexpanded in the same way as STRING, and consequently on VALUES-SPECIFIER-TYPE to ensure that the system would still recognize those types. Include test cases for the sequence functions but not for TYPEXPAND.
Thanks to Anton Kovalenko.
(os_validate): mwwFlag reintroduced
except one case of using system-string (--ak) vs. reader conditionals (upstream)
…l on win32.
* contrib/sb-simple-streams/simple-stream-tests.lisp: ditto
Conflicts: contrib/sb-bsd-sockets/sockets.lisp contrib/sb-posix/interface.lisp contrib/sb-simple-streams/file.lisp contrib/sb-simple-streams/simple-stream-tests.lisp package-data-list.lisp-expr src/code/serve-event.lisp src/code/win32.lisp src/runtime/win32-os.c Non-conflicting files
Factored out into a new function for the win32-specific WSAGetLastError call. Run-time results now match the existing constant definitions. Thanks to Anton Kovalenko.
Needed for Windows. Thanks to Anton Kovalenko.