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

Ehsan Akhgari ehsan.akhgari at gmail.com
Wed Jul 16 14:50:22 PDT 2014


On Wed, Jul 16, 2014 at 5:14 PM, Nico Weber <thakis at chromium.org> wrote:

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

I'm mostly trying to increase the test coverage for ms inline assembly by
throwing more code at it...  I'm not worried about those fixes regressing,
but other things might.

--
Ehsan
<http://ehsanakhgari.org/>



>
>
>> 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/73ab700b/attachment.html>


More information about the cfe-commits mailing list