mixin assembler does not work?

bearophile via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jul 20 07:40:10 PDT 2014


Foo:

> Hey guys. Can someone explain me, why this code does only works
> with the inline assembler version but not with the mixin?

You need mixin(), it's unfortunate this gives no error messages:


import std.string: format;

enum Vala(uint count, alias arr) = format("
     asm {
         sub ESP, %d;     // Reserve 'count' bytes
         mov %s, %d;      // Set a.length = 'count'
         mov %s + 4, ESP; // Set &a[0] to reserved bytes
     }", count, arr.stringof, count, arr.stringof);

void main() {
     import std.stdio: writeln;

     ubyte[] a;
     a.length.writeln;

     static if (false) {
         asm {
             sub ESP, 1000;  // Reserve 1000 bytes
             mov a, 1000;    // Set a.length = 1000
             mov a + 4, ESP; // Set &a[0] to reserved bytes
         }
     } else {
         mixin(Vala!(1000, a));
     }

     a.length.writeln;
}

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list