I suppose additional error information have to be given as return values?

> `proc p(args): T {.raises: ErrorCode.}` is translated to `proc p(args): 
> (ErrorCode, T)` when T is an integral type (int etc.). [...] This seems to 
> produce the best code for the common architectures (x86, x86_64, ARM, RISC 
> V). The errors are propagated through CPU registers.

For Windows x64 at most 64-bit structs may be returned via registers (which is 
easily hit as 64-bit integers are default in Nim). See 
<https://godbolt.org/z/vKGoGxGrn>

The same gose for 32-bit ARM except that it is only 32-bit. See 
<https://godbolt.org/z/96W1oEvMK>

For both cases there are exceptions. E.g. on 32-bit ARM a 64-bit integer or 
vector may be returned in two registers <https://godbolt.org/z/MqMWeYr47> and 
for Windows x64 a 128-bit vector may be returned in an SSE register.

Reply via email to