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

Nico Weber thakis at chromium.org
Wed Jul 16 14:14:28 PDT 2014


On Mon, Jul 14, 2014 at 8:35 PM, Ehsan Akhgari <ehsan.akhgari at gmail.com>
wrote:

> 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.
>

The recent fixes probably already included tests. Does this test anything
in addition to that? If so, can the test be named after what it tests?


>
> 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
> +    }
> +}
> +
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140716/9573db76/attachment.html>


More information about the cfe-commits mailing list