The X Macro using D

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 20 14:21:48 PDT 2017


On Thursday, 20 July 2017 at 21:17:45 UTC, Walter Bright wrote:
> template Y(alias X)
> {
>     enum Y =
>     [
>         //  id   reg  mask   ty
>         X!("AH",   4, mAX, TYuchar),
>         X!("AL",   0, mAX, TYuchar),
>         X!("AX",   8, mAX, TYushort),
>         X!("BH",   7, mBX, TYuchar),
>         X!("BL",   3, mBX, TYuchar),
>         X!("BP",  13,   0, TYushort),
>         X!("BX",  11, mBX, TYushort),
>         X!("CH",   5, mCX, TYuchar),
>         X!("CL",   1, mCX, TYuchar),
>         X!("CX",   9, mCX, TYushort),
>         X!("DH",   6, mDX, TYuchar),
>         X!("DI",  15, mDI, TYushort),
>         X!("DL",   2, mDX, TYuchar),
>         X!("DX",  10, mDX, TYushort),
>         X!("EAX", 16, mAX, TYulong),
>         X!("EBP", 21,   0, TYulong),
>         X!("EBX", 19, mBX, TYulong),
>         X!("ECX", 17, mCX, TYulong),
>         X!("EDI", 23, mDI, TYulong),
>         X!("EDX", 18, mDX, TYulong),
>         X!("ESI", 22, mSI, TYulong),
>         X!("ESP", 20,   0, TYulong),
>         X!("SI",  14, mSI, TYushort),
>         X!("SP",  12,   0, TYushort),
>     ];
> }
>
> // Table for identifiers
>
> template Xtab(alias A, alias B, alias C, alias D) { enum Xtab = 
> A; }
>
> private __gshared const(char)*[24] pseudotab = Y!Xtab;
>
>
> // Register number to use in addressing mode
>
> template Xreg(alias A, alias B, alias C, alias D) { enum Xreg = 
> B; }
>
> __gshared ubyte[24] pseudoreg = Y!Xreg;
>
>
> // Mask to use for registers affected
>
> template Xmask(alias A, alias B, alias C, alias D) { enum Xmask 
> = C; }
>
> __gshared regm_t[24] pseudomask = Y!Xmask;
>
>
> // Table for type of pseudo register variable
>
> template Xty(alias A, alias B, alias C, alias D) { enum Xty = 
> mTYvolatile | D; }
>
> private __gshared const(tym_t)[24] pseudoty = Y!Xty;

Please tell me this is not going to get into dmd :)
templates are so much more expensive then macros.
(Well, for now :) )

Those templates can and should be replaced by CTFE.


More information about the Digitalmars-d mailing list