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*, ...);