view tests/mini/asm9.d @ 1602:a413ae7329bf

Merge DMD r243: some harmonization with D2 dmd --- dmd/aggregate.h | 24 ++++- dmd/attrib.c | 63 ++++++---- dmd/attrib.h | 10 +- dmd/declaration.h | 5 +- dmd/func.c | 337 ++++++++++++++++++++++------------------------------- dmd/mars.c | 2 +- dmd/mars.h | 7 + dmd/mtype.h | 13 ++- dmd/parse.c | 32 ++++- dmd/parse.h | 14 ++- dmd/scope.h | 2 +- 11 files changed, 263 insertions(+), 246 deletions(-)
author Leandro Lucarella <llucax@gmail.com>
date Wed, 06 Jan 2010 15:18:19 -0300
parents 523bf4f166bc
children
line wrap: on
line source

module asm9;

version(X86)            version = DoSome;
else version(X86_64)    version = DoSome;

T add(T, T t)(T a) {
    asm {
        add a, t;
    }
    return a;
}

void main() {
    version (DoSome) {
        assert(add!(ubyte, 20)(10) == 30);
        assert(add!(ushort, 20_000)(10_000) == 30_000);
        assert(add!(uint, 2_000_000)(1_000_000) == 3_000_000);
    }
    version(X86_64) {
        // 64-bit immediates aren't allowed on "ADD", nor are
        // unsigned 32-bit ones, so make the template parameter
        // fit in a 32-bit signed int.
        // These values were chosen so that the lower 32-bits overflow
        // and we can see the upper half of the 64-bit input increment.
        auto result = add!(long, 2_000_000_000)(21_000_000_000);
        assert(result == 23_000_000_000);
    }
}