#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 */
struct YsGLSLPlain2DRenderer {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ YsGLSLDrawPlain2DLinef(struct YsGLSLPlain2DRenderer const *,
                                          float, float, float, float, float,
                                          float, float, float);
void YsGLSLDrawPlain2DLined(const struct YsGLSLPlain2DRenderer *renderer,
                            const double x0, const double y0, const double x1,
                            const double y1, const double r, const double g,
                            const double b, const double a) {
  YsGLSLDrawPlain2DLinef(renderer, (float)x0, (float)y0, (float)x1, (float)y1,
                         (float)r, (float)g, (float)b, (float)a);
}


x86 assembly (clang, -O0):
<YsGLSLDrawPlain2DLined>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    -0x8(%rbp),%rdi
movsd  -0x10(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movsd  -0x18(%rbp),%xmm1
cvtsd2ss %xmm1,%xmm1
movsd  -0x20(%rbp),%xmm2
cvtsd2ss %xmm2,%xmm2
movsd  -0x28(%rbp),%xmm3
cvtsd2ss %xmm3,%xmm3
movsd  -0x30(%rbp),%xmm4
cvtsd2ss %xmm4,%xmm4
movsd  -0x38(%rbp),%xmm5
cvtsd2ss %xmm5,%xmm5
movsd  -0x40(%rbp),%xmm6
cvtsd2ss %xmm6,%xmm6
movsd  -0x48(%rbp),%xmm7
cvtsd2ss %xmm7,%xmm7
call   1030 <YsGLSLDrawPlain2DLinef@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<YsGLSLDrawPlain2DLined>:
cvtsd2ss %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm2
cvtsd2ss %xmm3,%xmm3
cvtsd2ss %xmm4,%xmm4
cvtsd2ss %xmm5,%xmm5
cvtsd2ss %xmm6,%xmm6
cvtsd2ss %xmm7,%xmm7
jmp    1030 <YsGLSLDrawPlain2DLinef@plt>

LLVM IR (-O0):
%struct.YsGLSLPlain2DRenderer = type { i32 }
define void @YsGLSLDrawPlain2DLined(%struct.YsGLSLPlain2DRenderer* %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8) {
%10 = alloca %struct.YsGLSLPlain2DRenderer*
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
store %struct.YsGLSLPlain2DRenderer* %0, %struct.YsGLSLPlain2DRenderer** %10
store double %1, double* %11
store double %2, double* %12
store double %3, double* %13
store double %4, double* %14
store double %5, double* %15
store double %6, double* %16
store double %7, double* %17
store double %8, double* %18
%19 = load %struct.YsGLSLPlain2DRenderer*, %struct.YsGLSLPlain2DRenderer** %10
%20 = load double, double* %11
%21 = fptrunc double %20 to float
%22 = load double, double* %12
%23 = fptrunc double %22 to float
%24 = load double, double* %13
%25 = fptrunc double %24 to float
%26 = load double, double* %14
%27 = fptrunc double %26 to float
%28 = load double, double* %15
%29 = fptrunc double %28 to float
%30 = load double, double* %16
%31 = fptrunc double %30 to float
%32 = load double, double* %17
%33 = fptrunc double %32 to float
%34 = load double, double* %18
%35 = fptrunc double %34 to float
%36 = call i32 @YsGLSLDrawPlain2DLinef(%struct.YsGLSLPlain2DRenderer* %19, float %21, float %23, float %25, float %27, float %29, float %31, float %33, float %35)
ret void
}

LLVM IR (-O2):
%struct.YsGLSLPlain2DRenderer = type { i32 }
define void @YsGLSLDrawPlain2DLined(%struct.YsGLSLPlain2DRenderer* %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8) {
%10 = fptrunc double %1 to float
%11 = fptrunc double %2 to float
%12 = fptrunc double %3 to float
%13 = fptrunc double %4 to float
%14 = fptrunc double %5 to float
%15 = fptrunc double %6 to float
%16 = fptrunc double %7 to float
%17 = fptrunc double %8 to float
%18 = tail call i32 @YsGLSLDrawPlain2DLinef(%struct.YsGLSLPlain2DRenderer* %0, float %10, float %11, float %12, float %13, float %14, float %15, float %16, float %17)
ret void
}