diff options
Diffstat (limited to 'test/CodeGen/asm-inout.c')
-rw-r--r-- | test/CodeGen/asm-inout.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/test/CodeGen/asm-inout.c b/test/CodeGen/asm-inout.c index ce524fe..c7d1aec 100644 --- a/test/CodeGen/asm-inout.c +++ b/test/CodeGen/asm-inout.c @@ -19,21 +19,30 @@ void test2() { } // PR7338 +// CHECK: @test3 void test3(int *vout, int vin) { // CHECK: call void asm "opr $0,$1", "=*r|m|r,r|m|r,~{edi},~{dirflag},~{fpsr},~{flags}" -asm( - "opr %[vout],%[vin]" - : [vout] "=r,=m,=r" (*vout) - : [vin] "r,m,r" (vin) - : "edi" - ); + asm ("opr %[vout],%[vin]" + : [vout] "=r,=m,=r" (*vout) + : [vin] "r,m,r" (vin) + : "edi"); } // PR8959 - This should implicitly truncate the immediate to a byte. +// CHECK: @test4 int test4(volatile int *addr) { unsigned char oldval; + // CHECK: call i8 asm "frob $0", "=r,0{{.*}}"(i8 -1) __asm__ ("frob %0" : "=r"(oldval) : "0"(0xff)); return (int)oldval; -// CHECK: call i8 asm "frob $0", "=r,0{{.*}}"(i8 -1) +} + +// <rdar://problem/10919182> - This should have both inputs be of type x86_mmx. +// CHECK: @test5 +typedef long long __m64 __attribute__((__vector_size__(8))); +__m64 test5(__m64 __A, __m64 __B) { + // CHECK: call x86_mmx asm "pmulhuw $1, $0\0A\09", "=y,y,0,~{dirflag},~{fpsr},~{flags}"(x86_mmx %{{.*}}, x86_mmx %{{.*}}) + asm ("pmulhuw %1, %0\n\t" : "+y" (__A) : "y" (__B)); + return __A; } |