#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 146
#define GL_COMBINE_ALPHA_EXT 145
#define GL_COMBINE_RGB_EXT 144
#define GL_OPERAND0_ALPHA_EXT 143
#define GL_OPERAND0_RGB_EXT 142
#define GL_OPERAND1_ALPHA_EXT 141
#define GL_OPERAND1_RGB_EXT 140
#define GL_OPERAND2_ALPHA_EXT 139
#define GL_OPERAND2_RGB_EXT 138
#define GL_RGB_SCALE_EXT 137
#define GL_SOURCE0_ALPHA_EXT 136
#define GL_SOURCE0_RGB_EXT 135
#define GL_SOURCE1_ALPHA_EXT 134
#define GL_SOURCE1_RGB_EXT 133
#define GL_SOURCE2_ALPHA_EXT 132
#define GL_SOURCE2_RGB_EXT 131
#define GL_TEXTURE_ENV_COLOR 130
#define GL_TEXTURE_ENV_MODE 129
#define GL_TEXTURE_LOD_BIAS_EXT 128
GLint __glTexEnvfv_size(GLenum e) {
  switch (e) {
  case GL_TEXTURE_ENV_MODE:
    return 1;
  case GL_TEXTURE_ENV_COLOR:
    return 4;
  case GL_COMBINE_RGB_EXT:
  case GL_COMBINE_ALPHA_EXT:
  case GL_SOURCE0_RGB_EXT:
  case GL_SOURCE1_RGB_EXT:
  case GL_SOURCE2_RGB_EXT:
  case GL_SOURCE0_ALPHA_EXT:
  case GL_SOURCE1_ALPHA_EXT:
  case GL_SOURCE2_ALPHA_EXT:
  case GL_OPERAND0_RGB_EXT:
  case GL_OPERAND1_RGB_EXT:
  case GL_OPERAND0_ALPHA_EXT:
  case GL_OPERAND1_ALPHA_EXT:
  case GL_OPERAND2_RGB_EXT:
  case GL_OPERAND2_ALPHA_EXT:
  case GL_RGB_SCALE_EXT:
  case GL_ALPHA_SCALE:
  case GL_TEXTURE_LOD_BIAS_EXT:
    return 1;
  default:
    return 0;
  }
}


x86 assembly (clang, -O0):
<__glTexEnvfv_size>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffff80,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x12,%eax
ja     1154 <__glTexEnvfv_size+0x54>
mov    -0x10(%rbp),%rax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x1,-0x4(%rbp)
jmp    115b <__glTexEnvfv_size+0x5b>
movl   $0x4,-0x4(%rbp)
jmp    115b <__glTexEnvfv_size+0x5b>
movl   $0x1,-0x4(%rbp)
jmp    115b <__glTexEnvfv_size+0x5b>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

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

LLVM IR (-O0):
define 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 %8 [
i32 129, label %5
i32 130, label %6
i32 144, label %7
i32 145, label %7
i32 135, label %7
i32 133, label %7
i32 131, label %7
i32 136, label %7
i32 134, label %7
i32 132, label %7
i32 142, label %7
i32 140, label %7
i32 143, label %7
i32 141, label %7
i32 138, label %7
i32 139, label %7
i32 137, label %7
i32 146, label %7
i32 128, label %7
]
5: ; preds = %1
store i32 1, i32* %2
br label %9
6: ; preds = %1
store i32 4, i32* %2
br label %9
7: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
store i32 1, i32* %2
br label %9
8: ; preds = %1
store i32 0, i32* %2
br label %9
9: ; preds = %8, %7, %6, %5
%10 = load i32, i32* %2
ret i32 %10
}

LLVM IR (-O2):
@switch.table.__glTexEnvfv_size = [19 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]
define i32 @__glTexEnvfv_size(i32 %0) {
%2 = add i32 %0, -128
%3 = icmp ult i32 %2, 19
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [19 x i32], [19 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
}