Mercurial > projects > ldc
diff tests/mini/asm6.d @ 1215:08f87d8cd101
Fix some unittests for 64-bit asm. They were operating on int variables as if
they were longs.
This was causing asm1_1 to fail when compiled with -O3 because it was
overwriting the spilled value of callee-saved register %rbx, which the runtime
was using as a pointer value at the time.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 13 Apr 2009 17:42:36 +0200 |
parents | 4c524d80e6e1 |
children |
line wrap: on
line diff
--- a/tests/mini/asm6.d Mon Apr 13 16:16:03 2009 +0200 +++ b/tests/mini/asm6.d Mon Apr 13 17:42:36 2009 +0200 @@ -1,31 +1,25 @@ extern(C) int printf(char*, ...); +version (D_InlineAsm_X86) + version = InlineAsm_X86_Any; +version (D_InlineAsm_X86_64) + version = InlineAsm_X86_Any; + void main() { int a,b,c; a = int.max-1; b = 5; - version (D_InlineAsm_X86) + version (InlineAsm_X86_Any) { - asm - { - mov EAX, a; - mov ECX, b; - add EAX, ECX; - jo Loverflow; - mov c, EAX; - } - } - else version (D_InlineAsm_X86_64) - { - asm - { - movq RDX, a; - movq RAX, b; - add RDX, RAX; - jo Loverflow; - movq c, RDX; - } + asm + { + mov EAX, a; + mov ECX, b; + add EAX, ECX; + jo Loverflow; + mov c, EAX; + } } printf("a == %d\n", a); printf("b == %d\n", b);