LLVM asm with constraints, and 2 operands

Guillaume Piolat first.name at domain.tld
Sun Jul 18 17:45:05 UTC 2021


On Sunday, 18 July 2021 at 16:32:46 UTC, Basile B. wrote:
> Yeah I can confirm it's aweful. Took me hours to understand how 
> to use it a bit (my PL has [an 
> interface](https://styx-lang.gitlab.io/styx/primary_expressions.html#asmexpression) for LLVM asm)
>
> You need to add a "x" to the constraint string
>
>     return __asm!int4("paddd $1,$0","=x,x,x",a, b);
>
> - **=x** says "returns in whatever is has to"
> - **x** (1) is the constraint for input `a`, which is passed as 
> operand **$0**
> - **x** (2) is the constraint for input `b`, which is passed as 
> operand **$1**
>
> So the thing to get is that the output constraint does not 
> consume anything else, it is standalone.

Thanks.

Indeed that seems to work even when inline and optimized. 
Registers are spilled to stack.
A minor concern is what happens when the enclosing function is 
extern(C) => https://d.godbolt.org/z/s6dM3a3de
I need to check that more...


More information about the Digitalmars-d-learn mailing list