#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 GLint;
typedef int GLenum;

/* Variables and functions */
#define GL_ALPHA_SCALE 152
#define GL_BUMP_TARGET_ATI 151
#define GL_COMBINE_ALPHA 150
#define GL_COMBINE_RGB 149
#define GL_COORD_REPLACE_ARB 148
#define GL_OPERAND0_ALPHA 147
#define GL_OPERAND0_RGB 146
#define GL_OPERAND1_ALPHA 145
#define GL_OPERAND1_RGB 144
#define GL_OPERAND2_ALPHA 143
#define GL_OPERAND2_RGB 142
#define GL_OPERAND3_ALPHA_NV 141
#define GL_OPERAND3_RGB_NV 140
#define GL_RGB_SCALE 139
#define GL_SOURCE0_ALPHA 138
#define GL_SOURCE0_RGB 137
#define GL_SOURCE1_ALPHA 136
#define GL_SOURCE1_RGB 135
#define GL_SOURCE2_ALPHA 134
#define GL_SOURCE2_RGB 133
#define GL_SOURCE3_ALPHA_NV 132
#define GL_SOURCE3_RGB_NV 131
#define GL_TEXTURE_ENV_COLOR 130
#define GL_TEXTURE_ENV_MODE 129
#define GL_TEXTURE_LOD_BIAS 128
__attribute__((visibility("internal"))) __attribute__((pure)) GLint
__glTexEnvfv_size(GLenum e) {
  switch (e) {
  case GL_ALPHA_SCALE:
  case GL_TEXTURE_ENV_MODE:
  case GL_TEXTURE_LOD_BIAS:
  case GL_COMBINE_RGB:
  case GL_COMBINE_ALPHA:
  case GL_RGB_SCALE:
  case GL_SOURCE0_RGB:
  case GL_SOURCE1_RGB:
  case GL_SOURCE2_RGB:
  case GL_SOURCE3_RGB_NV:
  case GL_SOURCE0_ALPHA:
  case GL_SOURCE1_ALPHA:
  case GL_SOURCE2_ALPHA:
  case GL_SOURCE3_ALPHA_NV:
  case GL_OPERAND0_RGB:
  case GL_OPERAND1_RGB:
  case GL_OPERAND2_RGB:
  case GL_OPERAND3_RGB_NV:
  case GL_OPERAND0_ALPHA:
  case GL_OPERAND1_ALPHA:
  case GL_OPERAND2_ALPHA:
  case GL_OPERAND3_ALPHA_NV:
  case GL_BUMP_TARGET_ATI:
  case GL_COORD_REPLACE_ARB:
    return 1;
  case GL_TEXTURE_ENV_COLOR:
    return 4;
  default:
    return 0;
  }
}


x86 assembly (clang, -O0):
<__glTexEnvfv_size>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
add    $0xffffff80,%eax
sub    $0x2,%eax
jb     1147 <__glTexEnvfv_size+0x47>
jmp    111e <__glTexEnvfv_size+0x1e>
mov    -0xc(%rbp),%eax
sub    $0x82,%eax
je     1153 <__glTexEnvfv_size+0x53>
jmp    1131 <__glTexEnvfv_size+0x31>
mov    -0xc(%rbp),%eax
add    $0xffffff7d,%eax
sub    $0x15,%eax
ja     115f <__glTexEnvfv_size+0x5f>
jmp    1147 <__glTexEnvfv_size+0x47>
movl   $0x1,-0x4(%rbp)
jmp    1166 <__glTexEnvfv_size+0x66>
movl   $0x4,-0x4(%rbp)
jmp    1166 <__glTexEnvfv_size+0x66>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__glTexEnvfv_size>:
add    $0xffffff80,%edi
xor    %eax,%eax
cmp    $0x18,%edi
ja     1117 <__glTexEnvfv_size+0x17>
movslq %edi,%rax
lea    0xeec(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret

LLVM IR (-O0):
define hidden i32 @__glTexEnvfv_size(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %7 [
i32 152, label %5
i32 129, label %5
i32 128, label %5
i32 149, label %5
i32 150, label %5
i32 139, label %5
i32 137, label %5
i32 135, label %5
i32 133, label %5
i32 131, label %5
i32 138, label %5
i32 136, label %5
i32 134, label %5
i32 132, label %5
i32 146, label %5
i32 144, label %5
i32 142, label %5
i32 140, label %5
i32 147, label %5
i32 145, label %5
i32 143, label %5
i32 141, label %5
i32 151, label %5
i32 148, label %5
i32 130, label %6
]
5: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
store i32 1, i32* %2
br label %8
6: ; preds = %1
store i32 4, i32* %2
br label %8
7: ; preds = %1
store i32 0, i32* %2
br label %8
8: ; preds = %7, %6, %5
%9 = load i32, i32* %2
ret i32 %9
}

LLVM IR (-O2):
@switch.table.__glTexEnvfv_size = [25 x i32] [i32 1, i32 1, i32 4, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1]
define hidden i32 @__glTexEnvfv_size(i32 %0) {
%2 = add i32 %0, -128
%3 = icmp ult i32 %2, 25
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [25 x i32], [25 x i32]* @switch.table.__glTexEnvfv_size, i64 0, i64 %5
%7 = load i32, i32* %6
br label %8
8: ; preds = %1, %4
%9 = phi i32 [ %7, %4 ], [ 0, %1 ]
ret i32 %9
}