Question about GCC / GDC / LDC syntax of inline asm advanced

Iain Buclaw ibuclaw at gdcproject.org
Fri Jul 7 11:39:44 UTC 2023


On Thursday, 6 July 2023 at 23:11:08 UTC, Cecil Ward wrote:
> In GDC and LDC’s inline asm syntax, the main asm part is 
> separated from the constraints block by the first colon that 
> begins the ‘outputs’ section. My question: how does GDC / LDC / 
> GCC parse the first part, given that there can be umpteen kinds 
> of assembler language. Is the parsing asm dialect-specific so 
> that a full parse finds the first significant colon ?
>

The first part is parsed as an 
[AssignExpression](https://dlang.org/spec/expression.html#assign_expressions), so you could have:

```
asm {
   (test ? "if-true-insn" : "if-false-insn")
   ~ buildAsmString(foo, bar)
   ~ test2() ? enumInsnTrue : enumInsnFalse // assign-expression 
finishes here
   : output-constraints
   : ...
}
```
It's only at semantic-time that a "string-literal" result is 
enforced using CTFE.

> If not and the very first colon (outside double-quoted strings 
> and comments) ends the first section, which is how I parse it, 
> then there is a problem, as labels contain colons. And so I 
> have a bug in my gramma for my kludge asm section parser, see 
> thread elsewhere.
>

Labels are statements, so there shouldn't be any conflict between 
the two.


More information about the Digitalmars-d mailing list