mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-31 03:53:14 +01:00
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.
This commit is contained in:
@@ -9,25 +9,25 @@ int main()
|
||||
printf("%d\n", i);
|
||||
version (D_InlineAsm_X86)
|
||||
{
|
||||
asm
|
||||
{
|
||||
mov EBX, ip;
|
||||
mov EAX, [EBX];
|
||||
add EAX, 8;
|
||||
mul EAX, EAX;
|
||||
mov [EBX], EAX;
|
||||
}
|
||||
asm
|
||||
{
|
||||
mov ECX, ip;
|
||||
mov EAX, [ECX];
|
||||
add EAX, 8;
|
||||
mul EAX, EAX;
|
||||
mov [ECX], EAX;
|
||||
}
|
||||
}
|
||||
else version (D_InlineAsm_X86_64)
|
||||
{
|
||||
asm
|
||||
{
|
||||
movq RCX, ip;
|
||||
movq RAX, [RCX];
|
||||
add RAX, 8;
|
||||
imul RAX, RAX;
|
||||
movq [RCX], RAX;
|
||||
}
|
||||
asm
|
||||
{
|
||||
movq RCX, ip;
|
||||
mov EAX, [RCX];
|
||||
add EAX, 8;
|
||||
imul EAX, EAX;
|
||||
mov [RCX], EAX;
|
||||
}
|
||||
}
|
||||
printf("%d\n", i);
|
||||
assert(i == 400);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user