2014-06-06 05:23:42 +08:00
|
|
|
// REQUIRES: x86-registered-target
|
2014-06-09 05:28:54 +08:00
|
|
|
// RUN: %clang_cc1 -triple x86_64 %s -S -o /dev/null -DWARN -verify
|
|
|
|
// RUN: %clang_cc1 -triple x86_64 %s -S -o /dev/null -Werror -verify
|
2019-03-06 18:26:19 +08:00
|
|
|
// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -S -o - | FileCheck %s
|
2014-06-06 05:23:42 +08:00
|
|
|
void f() {
|
2014-06-09 05:28:54 +08:00
|
|
|
asm("movaps %xmm3, (%esi, 2)");
|
|
|
|
// expected-note@1 {{instantiated into assembly here}}
|
|
|
|
#ifdef WARN
|
|
|
|
// expected-warning@-3 {{scale factor without index register is ignored}}
|
|
|
|
#else
|
|
|
|
// expected-error@-5 {{scale factor without index register is ignored}}
|
|
|
|
#endif
|
2014-06-06 05:23:42 +08:00
|
|
|
}
|
2014-07-15 00:27:53 +08:00
|
|
|
|
|
|
|
static unsigned var[1] = {};
|
|
|
|
void g(void) { asm volatile("movd %%xmm0, %0"
|
|
|
|
:
|
|
|
|
: "m"(var)); }
|
2019-03-06 18:26:19 +08:00
|
|
|
|
|
|
|
void pr40890(void) {
|
|
|
|
struct s {
|
|
|
|
int a, b;
|
|
|
|
} s;
|
|
|
|
__asm__ __volatile__("\n#define S_A abcd%0\n" : : "n"(&((struct s*)0)->a));
|
|
|
|
__asm__ __volatile__("\n#define S_B abcd%0\n" : : "n"(&((struct s*)0)->b));
|
|
|
|
__asm__ __volatile__("\n#define BEEF abcd%0\n" : : "n"((int*)0xdeadbeeeeeef));
|
2019-03-08 17:01:10 +08:00
|
|
|
__asm__ __volatile__("movabsq %0, %%rax" : : "n"(4624529908474429119));
|
2019-03-06 18:26:19 +08:00
|
|
|
|
|
|
|
// CHECK-LABEL: pr40890
|
|
|
|
// CHECK: #define S_A abcd$0
|
|
|
|
// CHECK: #define S_B abcd$4
|
|
|
|
// CHECK: #define BEEF abcd$244837814038255
|
2019-03-08 17:01:10 +08:00
|
|
|
// CHECK: movabsq $4624529908474429119, %rax
|
2019-03-06 18:26:19 +08:00
|
|
|
}
|