[PATCH] Upstream an MS inline assembly test from Mozilla's inline assembly code

Ehsan Akhgari ehsan.akhgari at gmail.com
Mon Jul 14 20:35:15 PDT 2014


Hi rnk,

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.

http://reviews.llvm.org/D4508

Files:
  test/CodeGen/mozilla-ms-inline-asm.c

Index: test/CodeGen/mozilla-ms-inline-asm.c
===================================================================
--- /dev/null
+++ test/CodeGen/mozilla-ms-inline-asm.c
@@ -0,0 +1,41 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -emit-llvm -o - | 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: %that.addr = alloca i8*, align 4
+// CHECK: %methodIndex.addr = alloca i32, align 4
+// CHECK: %paramCount.addr = alloca i32, align 4
+// CHECK: %params.addr = alloca i8*, align 4
+// CHECK: store i8* %that, i8** %that.addr, align 4
+// CHECK: store i32 %methodIndex, i32* %methodIndex.addr, align 4
+// CHECK: store i32 %paramCount, i32* %paramCount.addr, align 4
+// CHECK: store i8* %params, i8** %params.addr, align 4
+// CHECK: call void asm sideeffect inteldialect "mov edx,dword ptr $1\0A\09test edx,edx\0A\09jz noparams\0A\09mov eax,edx\0A\09shl eax,$$3\0A\09sub esp,eax\0A\09mov ecx,esp\0A\09push dword ptr $0\0A\09call invoke_copy_to_stack\0A\09noparams:\0A\09mov ecx,dword ptr $2\0A\09push ecx\0A\09mov edx,[ecx]\0A\09mov eax,dword ptr $3\0A\09call dword ptr[edx+eax*$$4]\0A\09mov esp,ebp\0A\09pop ebp\0A\09ret", "=*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}"(i8** %params.addr, i32* %paramCount.addr, i8** %that.addr, i32* %methodIndex.addr) #1
+// 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
+    }
+}
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4508.11416.patch
Type: text/x-patch
Size: 2017 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140715/e5d78e9e/attachment.bin>


More information about the cfe-commits mailing list