Mercurial > projects > ldc
view tests/mini/asm8.d @ 947:9a10fa839dc5
Switch some getModule to getCompilationModule to make sure templates are
emitted in the right module.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 08 Feb 2009 18:51:32 +0100 |
parents | 03d7c4aac654 |
children | b2d27ddf8f45 |
line wrap: on
line source
int foo() { version(X86) asm { mov EAX, 42; } else static assert(0, "todo"); } ulong bar() { version(X86) asm { mov EDX, 0xAA; mov EAX, 0xFF; } else static assert(0, "todo"); } float onef() { version(X86) asm { fld1; } else static assert(0, "todo"); } double oned() { version(X86) asm { fld1; } else static assert(0, "todo"); } real oner() { version(X86) asm { fld1; } else static assert(0, "todo"); } real two = 2.0; creal cr() { version(X86) asm { fld1; fld two; } else static assert(0, "todo"); } creal cr2() { version(X86) asm { naked; fld1; fld two; ret; } else static assert(0, "todo"); } void* vp() { version(X86) asm { mov EAX, 0x80; } else static assert(0, "todo"); } int[int] gaa; int[int] aa() { version(X86) asm { mov EAX, gaa; } else static assert(0, "todo"); } Object gobj; Object ob() { version(X86) asm { mov EAX, gobj; } else static assert(0, "todo"); } char[] ghello = "hello world"; char[] str() { version(X86) asm { lea ECX, ghello; mov EAX, [ECX]; mov EDX, [ECX+4]; } else static assert(0, "todo"); } char[] delegate() dg() { version(X86) asm { mov EAX, gobj; lea EDX, Object.toString; } else static assert(0, "todo"); } void main() { gaa[4] = 5; gobj = new Object; auto adg = &gobj.toString; assert(foo() == 42); assert(bar() == 0x000000AA000000FF); assert(onef() == 1); assert(oned() == 1); assert(oner() == 1); assert(cr() == 1+2i); assert(cr2() == 1+2i); assert(vp() == cast(void*)0x80); assert(aa() is gaa); assert(ob() is gobj); assert(str() == "hello world"); assert(dg()() == "object.Object"); } extern(C) int printf(char*, ...);