#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_ARB 145
#define GL_COMBINE_RGB_ARB 144
#define GL_OPERAND0_ALPHA_ARB 143
#define GL_OPERAND0_RGB_ARB 142
#define GL_OPERAND1_ALPHA_ARB 141
#define GL_OPERAND1_RGB_ARB 140
#define GL_OPERAND2_ALPHA_ARB 139
#define GL_OPERAND2_RGB_ARB 138
#define GL_RGB_SCALE_ARB 137
#define GL_SOURCE0_ALPHA_ARB 136
#define GL_SOURCE0_RGB_ARB 135
#define GL_SOURCE1_ALPHA_ARB 134
#define GL_SOURCE1_RGB_ARB 133
#define GL_SOURCE2_ALPHA_ARB 132
#define GL_SOURCE2_RGB_ARB 131
#define GL_TEXTURE_ENV_COLOR 130
#define GL_TEXTURE_ENV_MODE 129
#define GL_TEXTURE_LOD_BIAS_EXT 128
GLint __glGetTexEnvfv_size(GLenum pname) {
  switch (pname) {
  case GL_TEXTURE_ENV_MODE:
    return 1;
  case GL_TEXTURE_ENV_COLOR:
    return 4;
  case GL_TEXTURE_LOD_BIAS_EXT:
    return 1;
  case GL_COMBINE_RGB_ARB:
  case GL_COMBINE_ALPHA_ARB:
  case GL_SOURCE0_RGB_ARB:
  case GL_SOURCE1_RGB_ARB:
  case GL_SOURCE2_RGB_ARB:
  case GL_SOURCE0_ALPHA_ARB:
  case GL_SOURCE1_ALPHA_ARB:
  case GL_SOURCE2_ALPHA_ARB:
  case GL_OPERAND0_RGB_ARB:
  case GL_OPERAND1_RGB_ARB:
  case GL_OPERAND2_RGB_ARB:
  case GL_OPERAND0_ALPHA_ARB:
  case GL_OPERAND1_ALPHA_ARB:
  case GL_OPERAND2_ALPHA_ARB:
  case GL_RGB_SCALE_ARB:
  case GL_ALPHA_SCALE:
    return 1;
  default:
    return -1;
  }
}


x86 assembly (clang, -O0):
<__glGetTexEnvfv_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     1160 <__glGetTexEnvfv_size+0x60>
mov    -0x10(%rbp),%rax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x1,-0x4(%rbp)
jmp    1167 <__glGetTexEnvfv_size+0x67>
movl   $0x4,-0x4(%rbp)
jmp    1167 <__glGetTexEnvfv_size+0x67>
movl   $0x1,-0x4(%rbp)
jmp    1167 <__glGetTexEnvfv_size+0x67>
movl   $0x1,-0x4(%rbp)
jmp    1167 <__glGetTexEnvfv_size+0x67>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__glGetTexEnvfv_size>:
add    $0xffffff80,%edi
mov    $0xffffffff,%eax
cmp    $0x12,%edi
ja     111a <__glGetTexEnvfv_size+0x1a>
movslq %edi,%rax
lea    0xee9(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret

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

LLVM IR (-O2):
@switch.table.__glGetTexEnvfv_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 @__glGetTexEnvfv_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.__glGetTexEnvfv_size, i64 0, i64 %5
%7 = load i32, i32* %6
br label %8
8: ; preds = %1, %4
%9 = phi i32 [ %7, %4 ], [ -1, %1 ]
ret i32 %9
}