Source

Thread

1/ @NOTimothyLottes

Another round of getting optimized error checking. Disassembly [after syscall] shows that it works.
(1.) Volatile store LINE
(2.) Volatile store “error code”
(3.) TEST if error
(4.) Conditional forward branch on error [static prediction untaken]
AS_MINIMAL_AS_ONE_CAN_GET

2/ @NOTimothyLottes

A macro cheat sheet to try to explain how it works …

3/ @NOTimothyLottes

I have a collection of force inline wrappers that test returns from syscalls/functions for error and return the return. These all leverage builtin_expect so the compiler knows to make them fall through in the common case.

4/ @NOTimothyLottes

Those force inlines call Err() on terminal error. The Err() function ensures the {LINE, error} stores are visible, then triggers the console drawing code to kill the app with printed error. Then it sleeps until the termination.

5/ @NOTimothyLottes

Compiler eventually screws up, but at least it gets the fast path correct, and the slow error path gets an extra call. Effectively it conditionally forward branches to a distant call to Err() instead of just branching to the Err().

6/ @NOTimothyLottes

So I can liter error checks around stuff with little actual cost,
(1.) Two stores
(2.) A CMP or TEST
(3.) An ignored on no-error branch on the first execution! [this code almost never runs 2 times].

0 items under this folder.