#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ int32_t;

/* Variables and functions */
int /*<<< orphan*/ drawPoly3TGEx4(short, short, short, short, short, short,
                                  short, short, short, short, short, short,
                                  short, short, int /*<<< orphan*/,
                                  int /*<<< orphan*/, int /*<<< orphan*/);
void drawPoly4TGEx4_TRI(short x1, short y1, short x2, short y2, short x3,
                        short y3, short x4, short y4, short tx1, short ty1,
                        short tx2, short ty2, short tx3, short ty3, short tx4,
                        short ty4, short clX, short clY, int32_t col1,
                        int32_t col2, int32_t col3, int32_t col4) {
  drawPoly3TGEx4(x2, y2, x3, y3, x4, y4, tx2, ty2, tx3, ty3, tx4, ty4, clX, clY,
                 col2, col4, col3);
  drawPoly3TGEx4(x1, y1, x2, y2, x4, y4, tx1, ty1, tx2, ty2, tx4, ty4, clX, clY,
                 col1, col2, col3);
}


x86 assembly (clang, -O0):
<drawPoly4TGEx4_TRI>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %r8d,-0x5c(%rbp)
mov    %ecx,%eax
mov    -0x5c(%rbp),%ecx
mov    %eax,-0x58(%rbp)
mov    %edx,%eax
mov    -0x58(%rbp),%edx
mov    %eax,-0x54(%rbp)
mov    %esi,%eax
mov    -0x54(%rbp),%esi
mov    %eax,-0x50(%rbp)
mov    %edi,%r8d
mov    -0x50(%rbp),%edi
mov    %r9w,%ax
mov    0x88(%rbp),%r9d
mov    0x80(%rbp),%r9d
mov    0x78(%rbp),%r9d
mov    0x70(%rbp),%r9d
mov    0x68(%rbp),%r9w
mov    0x60(%rbp),%r9w
mov    0x58(%rbp),%r9w
mov    0x50(%rbp),%r9w
mov    0x48(%rbp),%r9w
mov    0x40(%rbp),%r9w
mov    0x38(%rbp),%r9w
mov    0x30(%rbp),%r9w
mov    0x28(%rbp),%r9w
mov    0x20(%rbp),%r9w
mov    0x18(%rbp),%r9w
mov    0x10(%rbp),%r9w
mov    %r8w,-0x2a(%rbp)
mov    %di,-0x2c(%rbp)
mov    %si,-0x2e(%rbp)
mov    %dx,-0x30(%rbp)
mov    %cx,-0x32(%rbp)
mov    %ax,-0x34(%rbp)
mov    -0x2e(%rbp),%di
mov    -0x30(%rbp),%si
mov    -0x32(%rbp),%dx
mov    -0x34(%rbp),%cx
mov    0x10(%rbp),%r8w
mov    0x18(%rbp),%r9w
mov    0x30(%rbp),%ax
mov    %ax,-0x4a(%rbp)
mov    0x38(%rbp),%ax
mov    %ax,-0x48(%rbp)
mov    0x40(%rbp),%ax
mov    %ax,-0x46(%rbp)
mov    0x48(%rbp),%r13w
mov    0x50(%rbp),%r12w
mov    0x58(%rbp),%r15w
mov    0x60(%rbp),%r14w
mov    0x68(%rbp),%bx
mov    0x78(%rbp),%r11d
mov    0x88(%rbp),%r10d
mov    0x80(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x4a(%rbp),%ax
movswl %di,%edi
movswl %si,%esi
movswl %dx,%edx
movswl %cx,%ecx
movswl %r8w,%r8d
movswl %r9w,%r9d
cwtl
mov    %eax,(%rsp)
mov    -0x48(%rbp),%ax
cwtl
mov    %eax,0x8(%rsp)
mov    -0x46(%rbp),%ax
cwtl
mov    %eax,0x10(%rsp)
mov    -0x44(%rbp),%eax
movswl %r13w,%r13d
mov    %r13d,0x18(%rsp)
movswl %r12w,%r12d
mov    %r12d,0x20(%rsp)
movswl %r15w,%r15d
mov    %r15d,0x28(%rsp)
movswl %r14w,%r14d
mov    %r14d,0x30(%rsp)
movswl %bx,%ebx
mov    %ebx,0x38(%rsp)
mov    %r11d,0x40(%rsp)
mov    %r10d,0x48(%rsp)
mov    %eax,0x50(%rsp)
call   1030 <drawPoly3TGEx4@plt>
mov    -0x2a(%rbp),%di
mov    -0x2c(%rbp),%si
mov    -0x2e(%rbp),%dx
mov    -0x30(%rbp),%cx
mov    0x10(%rbp),%r8w
mov    0x18(%rbp),%r9w
mov    0x20(%rbp),%ax
mov    %ax,-0x3e(%rbp)
mov    0x28(%rbp),%ax
mov    %ax,-0x3c(%rbp)
mov    0x30(%rbp),%ax
mov    %ax,-0x3a(%rbp)
mov    0x38(%rbp),%r13w
mov    0x50(%rbp),%r12w
mov    0x58(%rbp),%r15w
mov    0x60(%rbp),%r14w
mov    0x68(%rbp),%bx
mov    0x70(%rbp),%r11d
mov    0x78(%rbp),%r10d
mov    0x80(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x3e(%rbp),%ax
movswl %di,%edi
movswl %si,%esi
movswl %dx,%edx
movswl %cx,%ecx
movswl %r8w,%r8d
movswl %r9w,%r9d
cwtl
mov    %eax,(%rsp)
mov    -0x3c(%rbp),%ax
cwtl
mov    %eax,0x8(%rsp)
mov    -0x3a(%rbp),%ax
cwtl
mov    %eax,0x10(%rsp)
mov    -0x38(%rbp),%eax
movswl %r13w,%r13d
mov    %r13d,0x18(%rsp)
movswl %r12w,%r12d
mov    %r12d,0x20(%rsp)
movswl %r15w,%r15d
mov    %r15d,0x28(%rsp)
movswl %r14w,%r14d
mov    %r14d,0x30(%rsp)
movswl %bx,%ebx
mov    %ebx,0x38(%rsp)
mov    %r11d,0x40(%rsp)
mov    %r10d,0x48(%rsp)
mov    %eax,0x50(%rsp)
call   1030 <drawPoly3TGEx4@plt>
add    $0x98,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<drawPoly4TGEx4_TRI>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9d,%r13d
mov    %r8d,%ebp
mov    %ecx,0x14(%rsp)
mov    %edx,0x10(%rsp)
mov    %esi,0x1c(%rsp)
mov    %edi,0x18(%rsp)
movswl 0x90(%rsp),%eax
mov    %rax,0x40(%rsp)
movswl 0x98(%rsp),%eax
mov    %rax,0x38(%rsp)
movswl 0x80(%rsp),%r8d
mov    %r8d,0xc(%rsp)
movswl 0x88(%rsp),%r9d
movswl 0xa0(%rsp),%r11d
movswl 0xa8(%rsp),%r14d
movswl 0xb0(%rsp),%eax
mov    %rax,0x28(%rsp)
movswl 0xb8(%rsp),%eax
mov    %rax,0x20(%rsp)
movswl 0xc0(%rsp),%r12d
movswl 0xc8(%rsp),%r10d
movswl 0xd0(%rsp),%eax
mov    %rax,0x30(%rsp)
movswl 0xd8(%rsp),%r15d
mov    0xf0(%rsp),%ebx
sub    $0x8,%rsp
mov    %edx,%edi
mov    %ecx,%esi
mov    %ebp,%edx
mov    %r13d,%ecx
mov    %r9d,%ebp
push   %rbx
mov    0x108(%rsp),%ebx
push   %rbx
mov    0x100(%rsp),%ebx
push   %rbx
push   %r15
push   %rax
push   %r10
mov    %r10,%r13
push   %r12
mov    %r12,%rbx
push   0x60(%rsp)
push   0x70(%rsp)
push   %r14
mov    %r14,%r12
push   %r11
mov    %r11,%r14
call   1030 <drawPoly3TGEx4@plt>
add    $0x58,%rsp
mov    0x20(%rsp),%edi
mov    0x24(%rsp),%esi
mov    0x18(%rsp),%edx
mov    0x1c(%rsp),%ecx
mov    0x14(%rsp),%r8d
mov    %ebp,%r9d
mov    0xf8(%rsp),%eax
push   %rax
mov    0xf8(%rsp),%eax
push   %rax
mov    0xf8(%rsp),%eax
push   %rax
push   %r15
push   0x58(%rsp)
push   %r13
push   %rbx
push   %r12
push   %r14
push   0x88(%rsp)
push   0x98(%rsp)
call   1030 <drawPoly3TGEx4@plt>
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @drawPoly4TGEx4_TRI(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3, i16 signext %4, i16 signext %5, i16 signext %6, i16 signext %7, i16 signext %8, i16 signext %9, i16 signext %10, i16 signext %11, i16 signext %12, i16 signext %13, i16 signext %14, i16 signext %15, i16 signext %16, i16 signext %17, i32 %18, i32 %19, i32 %20, i32 %21) {
%23 = alloca i16
%24 = alloca i16
%25 = alloca i16
%26 = alloca i16
%27 = alloca i16
%28 = alloca i16
%29 = alloca i16
%30 = alloca i16
%31 = alloca i16
%32 = alloca i16
%33 = alloca i16
%34 = alloca i16
%35 = alloca i16
%36 = alloca i16
%37 = alloca i16
%38 = alloca i16
%39 = alloca i16
%40 = alloca i16
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
store i16 %0, i16* %23
store i16 %1, i16* %24
store i16 %2, i16* %25
store i16 %3, i16* %26
store i16 %4, i16* %27
store i16 %5, i16* %28
store i16 %6, i16* %29
store i16 %7, i16* %30
store i16 %8, i16* %31
store i16 %9, i16* %32
store i16 %10, i16* %33
store i16 %11, i16* %34
store i16 %12, i16* %35
store i16 %13, i16* %36
store i16 %14, i16* %37
store i16 %15, i16* %38
store i16 %16, i16* %39
store i16 %17, i16* %40
store i32 %18, i32* %41
store i32 %19, i32* %42
store i32 %20, i32* %43
store i32 %21, i32* %44
%45 = load i16, i16* %25
%46 = load i16, i16* %26
%47 = load i16, i16* %27
%48 = load i16, i16* %28
%49 = load i16, i16* %29
%50 = load i16, i16* %30
%51 = load i16, i16* %33
%52 = load i16, i16* %34
%53 = load i16, i16* %35
%54 = load i16, i16* %36
%55 = load i16, i16* %37
%56 = load i16, i16* %38
%57 = load i16, i16* %39
%58 = load i16, i16* %40
%59 = load i32, i32* %42
%60 = load i32, i32* %44
%61 = load i32, i32* %43
%62 = call i32 @drawPoly3TGEx4(i16 signext %45, i16 signext %46, i16 signext %47, i16 signext %48, i16 signext %49, i16 signext %50, i16 signext %51, i16 signext %52, i16 signext %53, i16 signext %54, i16 signext %55, i16 signext %56, i16 signext %57, i16 signext %58, i32 %59, i32 %60, i32 %61)
%63 = load i16, i16* %23
%64 = load i16, i16* %24
%65 = load i16, i16* %25
%66 = load i16, i16* %26
%67 = load i16, i16* %29
%68 = load i16, i16* %30
%69 = load i16, i16* %31
%70 = load i16, i16* %32
%71 = load i16, i16* %33
%72 = load i16, i16* %34
%73 = load i16, i16* %37
%74 = load i16, i16* %38
%75 = load i16, i16* %39
%76 = load i16, i16* %40
%77 = load i32, i32* %41
%78 = load i32, i32* %42
%79 = load i32, i32* %43
%80 = call i32 @drawPoly3TGEx4(i16 signext %63, i16 signext %64, i16 signext %65, i16 signext %66, i16 signext %67, i16 signext %68, i16 signext %69, i16 signext %70, i16 signext %71, i16 signext %72, i16 signext %73, i16 signext %74, i16 signext %75, i16 signext %76, i32 %77, i32 %78, i32 %79)
ret void
}

LLVM IR (-O2):
define void @drawPoly4TGEx4_TRI(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3, i16 signext %4, i16 signext %5, i16 signext %6, i16 signext %7, i16 signext %8, i16 signext %9, i16 signext %10, i16 signext %11, i16 signext %12, i16 signext %13, i16 signext %14, i16 signext %15, i16 signext %16, i16 signext %17, i32 %18, i32 %19, i32 %20, i32 %21) {
%23 = tail call i32 @drawPoly3TGEx4(i16 signext %2, i16 signext %3, i16 signext %4, i16 signext %5, i16 signext %6, i16 signext %7, i16 signext %10, i16 signext %11, i16 signext %12, i16 signext %13, i16 signext %14, i16 signext %15, i16 signext %16, i16 signext %17, i32 %19, i32 %21, i32 %20)
%24 = tail call i32 @drawPoly3TGEx4(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3, i16 signext %6, i16 signext %7, i16 signext %8, i16 signext %9, i16 signext %10, i16 signext %11, i16 signext %14, i16 signext %15, i16 signext %16, i16 signext %17, i32 %18, i32 %19, i32 %20)
ret void
}