On Thu, 24 Oct 2019 at 12:05, drug via D.gnu <d.gnu@puremagic.com> wrote: > > Hello! > > I have the following assebly: > ```C > __asm__ __volatile__ ( > "990: nop\n" \ > ".pushsection .note.stapsdt,\"?\",\"note\"\n" \ > ".balign 4\n" \ > ".4byte 992f-991f, 994f-993f, 3\n" \ > "991: .asciz \"stapsdt\"\n" \ > "992: .balign 4\n" \ > "993: .8byte 990b\n" \ > ".8byte _.stapsdt.base\n" \ > ".8byte 0\n" \ > ".asciz \"myapp\"\n" \ > ".asciz \"func_call\"\n" \ > ".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2]\"\n" \ > "994: .balign 4\n" \ > ".popsection\n" > :: [_SDT_S1] "n" (4), > [_SDT_A1] "nor" ((a)), > [_SDT_S2] "n" (4), > [_SDT_A2] "nor" ((b)) > ); > ``` > this code compiles by gcc but gdc ((Debian 6.3.0-18+deb9u1) 6.3.0 > 20170516) fails. It doesn't like __volatile__ keyword and :: syntax > > ```D > __asm__ ( > "990: nop" > ".pushsection .note.stapsdt,\"?\",\"note\"" > ".balign 4" > ".4byte 992f-991f, 994f-993f, 3" > "991: .asciz \"stapsdt\"" > "992: .balign 4" > "993: .8byte 990b" > ".8byte _.stapsdt.base" > ".8byte 0" > ".asciz \"myapp\"" > ".asciz \"func_call\"" > ".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2]\"" > "994: .balign 4" > ".popsection\n" > :: [_SDT_S1] "n" (4), > [_SDT_A1] "nor" ((a)), > [_SDT_S2] "n" (4), > [_SDT_A2] "nor" ((b)) > ); > ```
It looks like this is a top-level inline asslembler declaration? D doesn't support top-level inline assembler, however I think this would be a useful feature to allow. As for the syntax, it's `asm { ... }` -- Iain