brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 2e379c1 Raw
65 lines · c
1// REQUIRES: x86-registered-target2// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -fasm-blocks -emit-llvm -o - | opt -passes=strip -S | FileCheck %s3 4// Some test cases for MS inline asm support from Mozilla code base.5 6void invoke_copy_to_stack() {}7 8void invoke(void* that, unsigned methodIndex,9            unsigned paramCount, void* params)10{11// CHECK: @invoke12// CHECK: %5 = alloca ptr, align 413// CHECK: %6 = alloca i32, align 414// CHECK: %7 = alloca i32, align 415// CHECK: %8 = alloca ptr, align 416// CHECK: store ptr %0, ptr %5, align 417// CHECK: store i32 %1, ptr %6, align 418// CHECK: store i32 %2, ptr %7, align 419// CHECK: store ptr %3, ptr %8, align 420// CHECK: call void asm sideeffect inteldialect21// CHECK-SAME: mov edx,$122// CHECK-SAME: test edx,edx23// CHECK-SAME: jz {{[^_]*}}__MSASMLABEL_.${:uid}__noparams24//                ^ Can't use {{.*}} here because the matching is greedy.25// CHECK-SAME: mov eax,edx26// CHECK-SAME: shl eax,$$327// CHECK-SAME: sub esp,eax28// CHECK-SAME: mov ecx,esp29// CHECK-SAME: push $030// CHECK-SAME: call ${2:P}31// CHECK-SAME: {{.*}}__MSASMLABEL_.${:uid}__noparams:32// CHECK-SAME: mov ecx,$333// CHECK-SAME: push ecx34// CHECK-SAME: mov edx,[ecx]35// CHECK-SAME: mov eax,$436// CHECK-SAME: call dword ptr[edx + eax * $$4]37// CHECK-SAME: mov esp,ebp38// CHECK-SAME: pop ebp39// CHECK-SAME: ret40// CHECK: "=*m,*m,*m,*m,*m,~{eax},~{ebp},~{ecx},~{edx},~{flags},~{esp},~{dirflag},~{fpsr},~{flags}"41// CHECK: (ptr elementtype(ptr) %8, ptr elementtype(i32) %7, ptr elementtype(void (...)) @invoke_copy_to_stack, ptr elementtype(ptr) %5, ptr elementtype(i32) %6)42// CHECK: ret void43    __asm {44        mov     edx,paramCount45        test    edx,edx46        jz      noparams47        mov     eax,edx48        shl     eax,349        sub     esp,eax50        mov     ecx,esp51        push    params52        call    invoke_copy_to_stack53noparams:54        mov     ecx,that55        push    ecx56        mov     edx,[ecx]57        mov     eax,methodIndex58        call    dword ptr[edx+eax*4]59        mov     esp,ebp60        pop     ebp61        ret62    }63}64 65