From: Ehsan Akhgari Date: Thu, 17 Jul 2014 11:38:22 +0000 (+0000) Subject: Upstream an MS inline assembly test from Mozilla's inline assembly code X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d86ca7a9c7c27eb968645a12cf8bb1f708c4fed3;p=platform%2Fupstream%2Fllvm.git Upstream an MS inline assembly test from Mozilla's inline assembly code Summary: I'm planning on upstreaming some test cases for the inline assembly usage in the Mozilla code base. A lot of these test cases test the recent fixes to this code. Reviewers: rnk Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4508 llvm-svn: 213255 --- diff --git a/clang/test/CodeGen/mozilla-ms-inline-asm.c b/clang/test/CodeGen/mozilla-ms-inline-asm.c new file mode 100644 index 0000000..0f541d7 --- /dev/null +++ b/clang/test/CodeGen/mozilla-ms-inline-asm.c @@ -0,0 +1,61 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -emit-llvm -o - | opt -strip -S | FileCheck %s + +// Some test cases for MS inline asm support from Mozilla code base. + +void invoke(void* that, unsigned methodIndex, + unsigned paramCount, void* params) +{ +// CHECK: @invoke +// CHECK: %5 = alloca i8*, align 4 +// CHECK: %6 = alloca i32, align 4 +// CHECK: %7 = alloca i32, align 4 +// CHECK: %8 = alloca i8*, align 4 +// CHECK: store i8* %0, i8** %5, align 4 +// CHECK: store i32 %1, i32* %6, align 4 +// CHECK: store i32 %2, i32* %7, align 4 +// CHECK: store i8* %3, i8** %8, align 4 +// CHECK: call void asm sideeffect inteldialect +// CHECK: mov edx,dword ptr $1 +// CHECK: test edx,edx +// CHECK: jz noparams +// CHECK: mov eax,edx +// CHECK: shl eax,$$3 +// CHECK: sub esp,eax +// CHECK: mov ecx,esp +// CHECK: push dword ptr $0 +// CHECK: call invoke_copy_to_stack +// CHECK: noparams: +// CHECK: mov ecx,dword ptr $2 +// CHECK: push ecx +// CHECK: mov edx,[ecx] +// CHECK: mov eax,dword ptr $3 +// CHECK: call dword ptr[edx+eax*$$4] +// CHECK: mov esp,ebp +// CHECK: pop ebp +// CHECK: ret +// CHECK: "=*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}" +// CHECK: (i8** %8, i32* %7, i8** %5, i32* %6) +// CHECK: ret void + __asm { + mov edx,paramCount + test edx,edx + jz noparams + mov eax,edx + shl eax,3 + sub esp,eax + mov ecx,esp + push params + call invoke_copy_to_stack +noparams: + mov ecx,that + push ecx + mov edx,[ecx] + mov eax,methodIndex + call dword ptr[edx+eax*4] + mov esp,ebp + pop ebp + ret + } +} +