mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-15 20:33:14 +01:00
Fixed problems with label collisions when using labels inside inline asm. LabelStatement is now easily reached given its Identifier, which should be useful elsewhere too. Enabled inline asm for building the lib/compiler/llvmdc runtime code, fixing branches out of asm makes this possible.
42 lines
593 B
D
42 lines
593 B
D
module tangotests.asm7;
|
|
|
|
// test massive label collisions (runtime uses Loverflow too)
|
|
|
|
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;
|
|
asm
|
|
{
|
|
mov EAX, a;
|
|
add EAX, b;
|
|
jo Loverflow;
|
|
mov res, EAX;
|
|
}
|
|
return res;
|
|
Loverflow:
|
|
assert(0, "add overflow");
|
|
}
|
|
|
|
int sub(int a, int b)
|
|
{
|
|
int res;
|
|
asm
|
|
{
|
|
mov EAX, a;
|
|
sub EAX, b;
|
|
jo Loverflow;
|
|
mov res, EAX;
|
|
}
|
|
return res;
|
|
Loverflow:
|
|
assert(0, "sub overflow");
|
|
}
|