view tests/mini/asm7.d @ 837:331a176c1f4f

Removed error on naked, not fully complete, but I'll be doing more work on it during this Christmas, and some things do work. Fixed taking delegate of final class method. see mini/delegate3.d.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 09 Dec 2008 14:07:30 +0100
parents 4ac97ec7c18e
children 12b423e17860
line wrap: on
line source

module tangotests.asm7;

// test massive label collisions (runtime uses Loverflow too)
extern(C) int printf(char*, ...);

void main()
{
    int a = add(1,2);
    int s = sub(1,2);
    assert(a == 3);
    assert(s == -1);
}

int add(int a, int b)
{
    int res;
    version (LLVM_InlineAsm_X86)
    {
	asm
    	{
		mov EAX, a;
        	add EAX, b;
        	jo Loverflow;
        	mov res, EAX;
    	}
    }
    else version (LLVM_InlineAsm_X86_64)
    {
	asm
	{
		mov EAX, a;
        	add EAX, b;
        	jo Loverflow;
        	mov res, EAX;
	}		
    }
    printf("%d\n",res);
    return res;
Loverflow:
    assert(0, "add overflow");
}

int sub(int a, int b)
{
    int res;
    version (LLVM_InlineAsm_X86)
    {
    	asm
    	{
		mov EAX, a;
        	sub EAX, b;
        	jo Loverflow;
        	mov res, EAX;
    	}
    }
    else version (LLVM_InlineAsm_X86_64)
    {
	asm
	{
		mov EAX, a;
        	sub EAX, b;
        	jo Loverflow;
        	mov res, EAX;
	}		
    }
    printf("%d\n",res);
    return res;
Loverflow:
    assert(0, "sub overflow");
    int x;
}