[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