mirror of
git://repo.or.cz/tinycc.git
synced 2026-06-20 03:44:19 +08:00
51 lines
814 B
C
51 lines
814 B
C
#include <stdio.h>
|
|
|
|
static void plain_inline_asm(void)
|
|
{
|
|
asm("nop");
|
|
}
|
|
|
|
static int inline_asm_goto(void)
|
|
{
|
|
asm goto("b %l[target]" : : : : target);
|
|
return 1;
|
|
target:
|
|
return 0;
|
|
}
|
|
|
|
#if defined(TEST_OPERANDS)
|
|
int main(void)
|
|
{
|
|
int input = 1;
|
|
int output = 0;
|
|
|
|
asm("add %w0, %w1, #1" : "=r"(output) : "r"(input));
|
|
printf("%d\n", output);
|
|
return output != 2;
|
|
}
|
|
#elif defined(TEST_CLOBBERS)
|
|
int main(void)
|
|
{
|
|
asm volatile("nop" : : : "x0");
|
|
return 0;
|
|
}
|
|
#elif defined(TEST_GOTO)
|
|
int main(void)
|
|
{
|
|
int rc = inline_asm_goto();
|
|
|
|
printf("%s\n", rc ? "asm goto wrong" : "asm goto ok");
|
|
return rc;
|
|
}
|
|
#else
|
|
int main(void)
|
|
{
|
|
int rc;
|
|
|
|
plain_inline_asm();
|
|
rc = inline_asm_goto();
|
|
printf("%s\n", rc ? "inline asm wrong" : "inline asm ok");
|
|
return rc;
|
|
}
|
|
#endif
|